cronは/etc/cron.d/*と/etc/cron.d/で環境変数をどのように設定しますか?

cronは/etc/cron.d/*と/etc/cron.d/で環境変数をどのように設定しますか?

Debian クローンのマニュアルページで、

/etc/cron.d/のファイルは/etc/crontabとは無関係です。たとえば、独立していません。継承する環境変数の設定は以下から取得します。それ

そしてLinuxQuestions.orgフォーラムで:/etc/crontab および /etc/cron.d および /var/spool/cron/crontabs/

/etc/cron.d/のスクリプトは環境変数をロードしません。

ルートとしてコマンドを追加したとします。/etc/crontab ファイルから。それが本当ならcrontab行を実行すると、ユーザーの環境変数がロードされます。どのスクリプトを/etc/cron.dに入れてもロードされません。

私が強調した文が何を意味するのか知りたいです。 「継承」は何から来たのか?

  1. のために/etc/cron.d/*cronは環境変数をリセットするため、タスク定義行から特定のユーザーの環境変数をロードしません。

    作成後/etc/cron.d/myjob

    35 * * * * t   echo $PATH  > /tmp/cron.log 2>&1
    

    /tmp/cron.log表示PATHのデフォルト値は次のとおりです。

    /usr/bin:/bin
    

    これはルートディレクトリへのパスではありません。

    $ sudo su
    # echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
    
  2. /etc/crontab私は追加しました

    * * * * * root   echo $PATH    > /tmp/cron.log 2>&1
    * * * * * t    echo $PATH  > /tmp/cron.log.1 2>&1
    

    これにより、ルートのcronジョブPATH値がルートの値ではありません。

    $ cat /tmp/cron.log
    /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    

    私のcronジョブのPATH値は私のものではありません(で修正されました~/.profile)。

    $ cat /tmp/cron.log.1
    /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    
    $ echo $PATH
    /home/t/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/opt/mssql-tools/bin
    
    $ less ~/.profile | grep PATH
    PATH="$HOME/bin:$PATH"
    PATH="$PATH:/opt/mssql-tools/bin"
    

ありがとうございます。

ベストアンサー1

からman 5 crontab

crontabのアクティブな行は次のとおりです。環境設定またはcronコマンド。

つまり、コメントアウトされていない行(#)は次のようになります。

PATH = /bin:/sbin

PATHこれにより、ファイル全体の値が設定されますcrontab

値を設定しない場合、組み込み値(コード内)この回答に示すように使用される。

PATHを設定するcrontabファイルの例:

SHELL=/bin/bash 
MAILTO=root
PATH=~/bin:/usr/bin/:/bin

# Edit this file to introduce tasks to be run by cron.
#.---------------- minute (m) (0 - 59)
#|      .------------- hour (h) (0 - 23)
#|      |       .---------- day of month (dom) (1 - 31)
#|      |       |       .------- month (mon) (1 - 12) OR jan,feb,mar,apr ...
#|      |       |       |       .---- day of week (dow) (0 - 6) (Sunday=0 or 7)  OR sun,mon,tue,wed,thu,fri,sat
#                                       .---- user
#|      |       |       |       |       |
#*      *       *       *       *       root   echo "the command to be executed"
#
#m      h       dom     mon     dow     user   command
*       *       *       *       *       root   echo "A crontab file test"

おすすめ記事