cronでshスクリプトを実行する

cronでshスクリプトを実行する

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」へのフルパスを使用する必要はありません。
...

おすすめ記事