PHP Cronjob改变sh root

时间:2012-06-17 11:44:49

标签: php cron crontab

首先设置一些背景:

  • 我有一个运行名为worker_cronjob的PHP文件的cronjob。所有文件都是从git下载我的worker,而cron.d中的cronjob看起来像是:

    * / 1 * * * * ubuntu / home / ubuntu / worker_cronjob>> /home/ubuntu/worker.log

  • 它包含worker_despatcher文件

  • 使用(ROOT是我目录的支路)来触发子进程:

    $ PID = exec(sprintf(“%s>%s 2>& 1& echo $!”,“php”.ROOT。“/ worker / encoder.php”。$ arg_string,ROOT。“ /worker/encoder.log“));

问题是在cronjob下这个方法正在改变系统命令的运行方式,更具体地说是sh。所以当我运行像:

这样的命令时
ffmpeg

它返回:

sh: 1: ffmpeg: command not found

在跟踪和错误之后我发现这只发生在cronjob上,不知何故它改变了目录的设置方式,就像chrooting没有我调用chroot一样。

我已经查看了其他线程,它说它在创建cronjobs和运行文件时使用完整路径,但是这不是我的文件是问题,它们都是通过绝对路径引用的,它运行安装的程序,我遇到问题。

绝对路径是否也适用于已安装的应用程序,或者有没有办法打破此功能,让我能够只用一个单词运行命令?

1 个答案:

答案 0 :(得分:1)

背后的原因是cronjobs由系统运行,因此他们对您的shell或用户环境变量一无所知。您可以说它们在最小环境中运行。

可以在Reasons why crontab does not work中找到详细的答案。

上述链接资源中未显示的另一种方式是:

* * * * * PATH=/usr/bin; command >> /var/log/command.log