cronを使用してシェルスクリプトを実行することはできません。

cronを使用してシェルスクリプトを実行することはできません。

test.shシェルスクリプトがあります/home/username

ファイルtest.shには次の行が含まれています。

#!/bin/sh

cd /home/username/bin

sh launch.sh  ParameterName

#launch.sh is in /home/username/bin directory

次のようにcrontabエントリを設定しました。

* * * * * /home/username/test.sh

端末で実行するとうまく/home/username/test.sh動作します。しかし、うまくいきませんcron

ベストアンサー1

コマンドラインでスクリプトを正しく実行することに関連するほとんどすべての問題は、cronPATH変数の設定が原因で発生します。man 5 crontabVixie cronによると:

   On the Debian GNU/Linux system, cron supports the pam_env  module,  and
   loads  the  environment  specified  by  /etc/environment and /etc/secu‐
   rity/pam_env.conf.    It   also   reads   locale    information    from
   /etc/default/locale.   However,  the  PAM  settings do NOT override the
   settings described above nor any settings in the crontab  file  itself.
   Note  in particular that if you want a PATH other than "/usr/bin:/bin",
   you will need to set it in the crontab file.

cron他のシステムおよび/または他の実装の詳細は異なる場合がありますが、cronから渡されたスクリプトのPATHは、シェルのパスよりも制限的である可能性があります。

これは、スクリプト(またはスクリプトから呼び出されたスクリプト/プログラム)によって呼び出されたすべてのエントリが、たとえば内で呼び出されたときに実行時に/usr/local/bin見つからないことを意味しますcron

スクリプトを呼び出してこれをテストできます。

 PATH=/usr/bin:/bin /home/username/test.sh

crontab ファイルのパスを拡張すると、この問題を解決できます。

 PATH = /usr/local/bin:/usr/bin:/bin

スクリプトが呼び出される実際の行の前に。変数は置き換えられません(したがって、これを行わないでくださいPATH = /usr/local/bin:$PATH)。

スクリプトの上部付近のログファイルの1つにechoステートメントを含めることも良い習慣です。

 TSTLOG=/var/tmp/myscript.log
 echo "invoking script" > "$TSTLOG"
 date >> "$TSTLOG"
 echo "$PATH" >> "$TSTLOG"

(意図的にここで取り上げましたecho)。したがって、プログラムが呼び出されているかどうか、どのような環境でこの現象が発生するのかを確認できます。

電子メールも確認する必要があります。システム自体で、システムが通常のアカウントに電子メールを転送するように設定されていない場合。多くのcron電子メールは電子メールがないので目立たない[email protected]。システムは、cronで使用されているローカルアカウントで読み取り可能なメッセージを配置します。

おすすめ記事