cron PATHをグローバルに(つまり、すべてのユーザーに対して)永続的に設定する方法は?


10

すべてのユーザーのcronのパスに/ usr / local / binが必要です。各ユーザーのcrontabを編集することなく、システム全体に設定する方法はありますか?

PATHを/ etc / crontabに追加してみました:

# grep PATH /etc/crontab
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

しかし、ユーザーがcrontabでこれを持っている場合:

$ crontab -l | grep PATH
* * * * * echo $PATH > /tmp/current_cron_path

...パスがまだデフォルトに設定されていることがわかります:

$ cat /tmp/current_cron_path
/usr/bin:/bin

2
一般的なヒント:「機能しませんでした」と書いても、通常は有用な返信が得られません。うまくいかなかった方法、つまり、何をしたのか、結果はどうだったのかを常に記述してください。
-sleske

回答:


4

そこを除く最初のコードに示すように、 crontab構成ファイルでPATHを構成できます。最初にenv変数を指定してから、ジョブを指定します。

UPD:リンクが壊れているという事実のため、ここに抜粋があります:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

1
cronを再起動した後でも、ubuntuで動作しません
グロス

1
@grosser:そうですね。完全なcrontabを投稿(回答を編集)し、生成された出力と、それが機能しないと思われる理由を投稿してください。その後、我々は...わかります
sleske

また、VARIABLE = value行の形式はシェルスクリプトよりも多少制限されていることに注意してください。各割り当ては独自の行で行う必要があり、右側で変数を使用することはできません(例:PATH = $ PATH:/ blaは機能しません)。
sleske

私は仕事をしなかった、ちょうど地球の変化が機能しなかった個々のcrontabでPATHを設定し、質問を更新
グローサー

必要な各crontabでPATH変数を指定してみてください。おそらくセキュリティの問題が原因です。ところで、ubuntuで(チェック済み)PATHは、ubuntuの/ etc / crontabと/etc/cron.d/anacronで定義されています。したがって、/ etc / crontabから継承されていないようです。ルートのcrontab(sudo crontab -e)で定義してみてください
igorp1024


1

私もこれに対する解決策を見つけることができませんでした。適切なソリューションに最も近いものは次のとおりです(https://raymii.org/s/tutorials/Better_cron_env_and_shell_control_with_the_SHELL_variale.htmlから取得)。

  • cronジョブのシェルを変更し、bashスクリプトをポイントします。つまり、cronジョブの上部に次を追加します。 SHELL=/path/to/setup/cron.bash
  • このシェルスクリプトで、環境変数をロードし、他の変数を指定します。上部に次の4行を含めるようにしてください。SHELL変数をbashにリセットし、bashシェルを実行してcronjobsを実行します。

例えば:

#!/bin/bash
set -e

source /etc/environment
source /etc/profile
# restore SHELL env var for cron
SHELL=/bin/bash

# execute the cron command in an actual shell
exec /bin/bash --norc "$@"

欠点:これにはSHELL=...、すべてのcronジョブの先頭で指定する必要があります。利点:通常の環境変数を使用することになり、cronと他の変数との間で変数の一貫性を保つことを心配する必要がなくなります。


0

rootになることができる場合/etc/init.d/cronは、そこでPATHを編集および変更できますか?私はこれをテストしていませんが、チェックするのが面白いでしょう。


動作していないようで、PATH = xxxを/etc/init.d/cronに追加しましたが、* * * * *エコー$ PATH出力は同じでした
-Grosser
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.