You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP 7.x升级至8.1后exec()调用screen失效问题求助

问题排查与解决步骤

1. 替换PHP为绝对路径

HTTP访问与CLI运行时的环境变量可能存在差异,PHP7.x升级到8.1后,CLI环境下的php命令可能指向旧版本,或者未在screen的会话环境中生效。

  • 先查询PHP8.1 CLI的绝对路径:
    which php8.1
    
  • 修改exec()代码,将php替换为上述查询到的绝对路径,示例:
    exec('screen -S aggiornamento_clicks_DB_Bitly -dm bash -c "cd /var/www/html/Telegram_bot/Daniele/condividi_nel_gruppo_bot; while true; do /usr/bin/php8.1 aggiorna_clicks.php; sleep 300; done;"');
    

2. 捕获执行日志排查错误

screen进程运行但脚本未执行,大概率是执行过程中出现了隐性错误,可通过重定向输出到日志文件定位问题:

  • 修改代码添加日志输出:
    exec('screen -S aggiornamento_clicks_DB_Bitly -dm bash -c "cd /var/www/html/Telegram_bot/Daniele/condividi_nel_gruppo_bot; while true; do php8.1 aggiorna_clicks.php >> /var/log/bitly_clicks_run.log 2>&1; sleep 300; done;"');
    
  • 查看日志内容获取错误信息:
    cat /var/log/bitly_clicks_run.log
    

3. 统一screen会话的环境变量

screen在不同用户(如web用户www-data与本地用户)下的环境变量不一致,可能导致命令执行失败:

  • 修改代码,强制加载登录shell的环境变量,或显式指定PATH:
    exec('screen -S aggiornamento_clicks_DB_Bitly -dm bash -l -c "cd /var/www/html/Telegram_bot/Daniele/condividi_nel_gruppo_bot; while true; do php8.1 aggiorna_clicks.php; sleep 300; done;"');
    
    其中-l参数让bash以登录shell模式启动,加载完整的用户环境配置。

4. 检查文件与目录权限

CLI运行screen.php的用户与web访问用户的权限不同,可能导致aggiorna_clicks.php无法被读取或执行:

  • 调整目标目录与文件的权限,确保执行用户拥有访问权限:
    # 若为web用户运行,设置所属用户为www-data
    chown -R www-data:www-data /var/www/html/Telegram_bot/Daniele/condividi_nel_gruppo_bot
    chmod -R 755 /var/www/html/Telegram_bot/Daniele/condividi_nel_gruppo_bot
    

5. 验证PHP8.1 CLI的扩展配置

手动运行脚本正常,但screen会话中可能使用了不同的php.ini配置,导致依赖的扩展未启用:

  • 对比web与CLI环境的PHP扩展列表:
    # 查看web环境的已启用扩展
    php8.1 -c /etc/php/8.1/apache2/php.ini -m
    # 查看CLI环境的已启用扩展
    php8.1 -m
    
  • 若存在缺失的依赖扩展,编辑CLI对应的php.ini文件启用该扩展,再重启相关服务。

内容的提问来源于stack exchange,提问作者Daniele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 18:45:47