最初にいくつかのセットアップの背景:
worker_cronjob という PHP ファイルを実行する cronjob があります。ファイルは git からワーカーをダウンロードするだけで、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からのみ発生することを発見しました。chrootを呼び出さずにchrootするのと同じように、ディレクトリの設定方法が変更されています。
他のスレッドを調べたところ、cronjobs を作成してファイルを実行するときにフルパスを使用していると書かれていますが、問題は私のファイルではなく、それらはすべて絶対パスを介して参照されており、問題が発生するインストールされたプログラムを実行しています。
絶対パスはインストール済みのアプリにも適用されますか、それともこの機能を壊して 1 語でコマンドを実行できるようにする方法はありますか?