开发者社区 问答 正文

云服务器 ECS Linux Crontab 执行 PHP 程序失败 */1 * * * * /opt/lampp/htdocs/demon monitor >> /tmp/crontab/monitor.log #查看 /tmp/crontab/monitor.log 为空 $ ll -sh 0 -rwxrwxrwx 1 root root 0 8月 11 07:58 monitor.log #查看crontab日志,正常执行了 Aug 11 07:37:01 iZ25v3bf76fZ CROND[1

云服务器 ECS Linux Crontab 执行 PHP 程序失败
/1 * /opt/lampp/htdocs/demon monitor >> /tmp/crontab/monitor.log

查看 /tmp/crontab/monitor.log 为空

$ ll -sh
0 -rwxrwxrwx 1 root root 0 8月 11 07:58 monitor.log

查看crontab日志,正常执行了

Aug 11 07:37:01 iZ25v3bf76fZ CROND[1914]: (root) CMD (/opt/lampp/htdocs/demon monitor >> /tmp/crontab/monitor.log)
Aug 11 07:37:01 iZ25v3bf76fZ CROND[1923]: (root) CMD (/opt/lampp/htdocs/demon monitor >> /tmp/crontab/monitor.log)

单独直接执行程序正常

$ /opt/lampp/htdocs/demon monitor >> /tmp/crontab/monitor.log
$ ll -sh
4.0K -rwxrwxrwx 1 root root 1.9K 8月 11 08:00 monitor.log

展开
收起
行者武松 2018-01-09 15:49:41 4065 分享 版权
阿里云 AI 助理回答

当您遇到使用Crontab执行PHP脚本时,日志文件为空,但手动执行脚本却能正常工作的情况,这通常意味着环境变量或权限设置的问题。以下是一些可能的原因和解决方法:

  1. 环境变量差异:Cron作业运行时的环境与您的交互式shell环境不同,可能导致找不到某些命令或路径。您可以尝试在Crontab任务中显式地指定PHP解释器的完整路径,例如:

    */1 * * * * /usr/bin/php /opt/lampp/htdocs/demon monitor >> /tmp/crontab/monitor.log 2>&1
    

    这里/usr/bin/php是PHP解释器的假设路径,您需要根据实际情况替换为实际路径。

  2. 权限或路径问题:确保Cron作业执行的脚本以及涉及到的所有文件和目录都有足够的权限。虽然您提到手动执行没问题,但Cron作业是以root用户运行的,确认脚本内部是否有依赖其他需要特定用户权限的资源。

  3. 错误重定向:您已经在命令中使用了输出重定向,但为了捕捉潜在的错误信息,可以添加2>&1到重定向的末尾,这样标准错误也会被记录到日志文件中,有助于诊断问题:

    */1 * * * * /usr/bin/php /opt/lampp/htdocs/demon monitor >> /tmp/crontab/monitor.log 2>&1
    
  4. SHELL环境:有时Cron默认使用的Shell与您期望的不同,可以在Crontab文件的顶部指定Shell,例如:

    SHELL=/bin/bash
    

    确保这个Shell路径是正确的,并且与您测试脚本时使用的Shell一致。

  5. LAMP环境特有问题:如果您使用的是XAMPP(LAMPP是其Linux版本),可能存在一些特定于该环境的问题,比如PHP配置或Apache与PHP-FPM的交互方式。确保XAMPP的服务如Apache和MySQL在Cron执行时已经正确启动。

通过上述步骤排查和调整后,如果问题仍未解决,建议检查PHP脚本是否有对当前工作目录的依赖,或者尝试在脚本开始处打印当前的工作目录(pwd)和环境变量(printenv),以进一步定位问题所在。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答