test.shスクリプトがあります
#!/bin/sh
php /home/v/file.php
sh /root/x/some.sh
コマンドラインからrootとしてファイルを実行すると機能します。
sh /home/v/test.sh
crontab -e(root cron)に設定すると機能しません。
* * * * * sh /home/v/test.sh
私は何が間違っていましたか?ありがとう
ベストアンサー1
その男によると:
cronデーモンはHOMEディレクトリからサブシェルを起動します。ログインせずにコマンドを実行する予定で、.profileファイルからコマンドを実行するには、コマンドが.profileファイルを明示的に読み取る必要があります。
cronデーモンは、HOME、LOGNAME、SHELL(= / usr / bin / sh)、および
PATH(= / usr / bin)を定義して、各シェルの基本環境を提供します。
したがって、cronデーモンはphpがどこにあるかを知りません。たとえば、完全なphpパスを手動で指定する必要があります(実際のPHPパスはわかりません)。
#!/bin/sh
/usr/local/bin/php /home/v/file.php
sh /root/x/some.sh
別の方法は、次のように/etc/profile(または.profile/.bashrc)を取得することです。
* * * * * . /home/v/.bashrc ; sh /home/v/test.sh
.bashrcが必要な環境変数(PATHなど)を設定する場合に便利です。
編集する
興味深い読書は「初心者:cronについて”、タイトルの記事を過小評価しないでください(誰もが読むことができる記事です)。実際、この記事はよく書かれており、あなたの質問に完全に答えてくれます。
...
PATHには、cron検索パスにあるディレクトリが含まれています。たとえば、/usr/cog/bin ディレクトリに「foo」プログラムがある場合は、パスに /usr/cog/bin を追加することをお勧めします。呼び出すたびに「foo」へのフルパスを使用する必要はありません。
...