GNU/Linux >> Linux の 問題 >  >> Linux

正しい PATH で CRON を呼び出す方法

ほとんどの場合、cron は非常にまばらな環境で実行されています。 env をダンプするダミー ジョブを追加して、cron が使用している環境変数を確認します。 次のようなファイルに:

* * * * * env > env_dump.txt

それを env の出力と比較してください 通常のシェル セッションで。

独自の環境変数を crontab の先頭で定義することにより、ローカル crontab の先頭に追加できます。

$PATH を先頭に追加する簡単な修正方法を次に示します。 現在のcrontabへ:

# echo PATH=$PATH > tmp.cron
# echo >> tmp.cron
# crontab -l >> tmp.cron
# crontab tmp.cron

結果のcrontabは、crontabルールの前にPATHが定義された、chrissygormleyの回答に似ています。


crontab にフルパスを入れる必要があります .それが最も安全な選択肢です。
それをしたくない場合は、プログラムの周りにラッパー スクリプトを配置し、そこに PATH を設定できます。

01 01 * * * command

になります:

01 01 * * * /full/path/to/command

また、cron から呼び出されたものすべて 実行するプログラムには細心の注意を払う必要があり、おそらく PATH に対して独自の選択を設定する必要があります

編集:

必要なコマンドがどこにあるかわからない場合は、which <command> を実行します。 あなたのシェルから、それはあなたにパスを教えてくれます。

EDIT2:

したがって、プログラムが実行されたら、最初に行うべきことは PATH を設定することです およびその他の必要な変数 (例:LD_LIBRARY_PATH ) をスクリプトの実行に必要な値に変更します。
基本的に、cron 環境を変更してプログラム/スクリプトにより適したものにする方法を考えるのではなく、開始時に適切な環境を設定することにより、スクリプトが指定された環境を処理するようにします。


/etc/crontab を使用しました . vi を使用しました このファイルに必要な PATH を入力し、ルートとして実行しました。通常の crontab は、設定した PATH を上書きします。これを行う方法に関する優れたチュートリアルです。

システム全体の cron ファイルは次のようになります:

This has the username field, as used by /etc/crontab.
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file.
# This file also has a username field, that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user   command
42 6 * * *   root    run-parts --report /etc/cron.daily
47 6 * * 7   root    run-parts --report /etc/cron.weekly
52 6 1 * *   root    run-parts --report /etc/cron.monthly
01 01 * * 1-5 root python /path/to/file.py

Linux
  1. Linuxでcronを使用する方法

  2. cronデーモンの内部はどのように機能しますか?

  3. Crontab ログ:私の Cron スクリプトの出力をログに記録する方法

  1. 特定の曜日に cron ジョブを実行する方法

  2. Makefile でユーザー名を取得するにはどうすればよいですか?

  3. シェルで PYTHONPATH を取得するには?

  1. nohupプロセスを強制終了するプロセスIDを取得するには?

  2. bashでファイルの絶対ディレクトリを取得するにはどうすればよいですか?

  3. コマンドラインから IP アドレスを取得するにはどうすればよいですか?