首页 文章

PHP Cronjob改变sh root

提问于
浏览
0

一些设置背景优先:

  • 我有一个cronjob,它运行一个名为worker_cronjob的PHP文件 . 所有文件都是从git下载我的worker,cron.d中的cronjob看起来像:
  • / 1 * * * * ubuntu / home / ubuntu / worker_cronjob >> /home/ubuntu/worker.log
  • 它包含worker_despatcher文件

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

$ 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上,不知何故它改变了目录的设置方式,就像没有我调用chroot的chrooting一样 .

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

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

1 回答

  • 1

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

    一个非常详细的答案可以在Reasons why crontab does not work找到 .

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

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

相关问题