cron은 /etc/cron.d/* 및 /etc/cron.d/에서 환경 변수를 어떻게 설정합니까?

cron은 /etc/cron.d/* 및 /etc/cron.d/에서 환경 변수를 어떻게 설정합니까?

데비안 크론 매뉴얼 페이지에서,

/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"

관련 정보