crontab PATH変数を設定する方法

crontab PATH変数を設定する方法

crontabでスクリプトを実行する際に問題があります。調査した結果、PATHパラメータに/ sbinが含まれていないため、問題が発生することがわかりました。

/etc/crontabに含まれる内容を見てみました。

PATH=/sbin:/bin:/usr/sbin:/usr/bin

テスト - PATH変数を印刷する簡単なクローン操作:

* * * * * echo $PATH &> /root/TMP.log

出力は次のとおりです

cat /root/TMP.log
/usr/bin:/bin

この動作を理解していません。 PATH変数を設定する方法..?それとも、より良い方法は何ですか?パスを追加するには?

答え1

同様ですが、ユーザーcrontab(crontab -eで編集)はシステムcrontab(/ etc / crontab編集で編集)とは異なり、システムcrontabとは別のパスに保持されます。

システムcrontabには7つのフィールドがあり、コマンドの前にユーザー名が挿入されます。ユーザーcrontabには6つのフィールドのみがあり、コマンドは時間フィールドの直後に挿入されます。

同様に、システムcrontabのPATHには通常/ sbinディレクトリが含まれていますが、ユーザーcrontabのPATHには含まれていません。ユーザーcrontabにPATHを設定するには、ユーザーcrontabでPATH変数を定義する必要があります。


cronのシェルコマンドに一般的なPATHを追加する簡単な回避策は、ログインシェルでbashを実行してcronjobに設定ファイルをインポートさせることです。たとえば、代わりに

* * * * * some command

代わりに実行できます

* * * * * bash -lc some command

これにより、構成ファイルがPATHまたは他の環境変数を特別なものに設定した場合、その内容がコマンドに含まれます。

答え2

PATH(または他のパラメータ)は、cronjob行または単一行で設定できます。ただし、.tilde(〜)文字をホームディレクトリへのショートカットとして使用することはできませんPATH=$PATH:/usr/local/bin。 MacOSでは動作しますが、Linuxでは動作しないようです(少なくともdebian / busterの場合)。

本から:

crontabのアクティブな行は、環境設定またはcronコマンドです。環境設定は name=value 形式です。ここで、等号(=)の周囲のスペースはオプションであり、valueで先行しないスペースはnameに割り当てられた値の一部です。値文字列は、先頭または末尾のスペースを保持するために引用符(単一または二重、一致)で囲むことができます。

詳細についてはを参照してくださいman 5 crontab

だからこれはうまくいきます:

PATH=/bin:/usr/bin:/my/path/bin
5 3 * * * command_that_requires_my_path

答え3

デフォルトのシステムフルパスと他のENV変数(/ etc / profile.dで定義されている)が必要な場合は、次のように入力します。

* * * * * . /etc/profile; your cmd

答え4

次のようにコマンドを拡張すると、cronにいくつかのロギングを要求できます。

たとえば、毎回XX:05に実行します。

5 * * * * /usr/bin/bash -x /path/to/script 2>&1 | tee -a /root/output.cron.txt

cronでどのような問題が発生したかを確認してください。

マイケルHTH

関連情報