cron PATH를 전역 적으로 (모든 사용자에 대해) 영구적으로 설정하는 방법은 무엇입니까? etc / crontab에 PATH를 추가하려고했습니다 : #

모든 사용자의 cron 경로에 / usr / local / bin이 있어야합니다. 각 개별 사용자의 crontab을 편집 할 필요없이 시스템 전체에 설정하는 방법이 있습니까?

/ etc / crontab에 PATH를 추가하려고했습니다 :

# 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



답변

첫 번째 코드에서와 같이 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


답변

우분투에서 PATH 변수를 설정하면 작동하지 않습니다. 어떻게 작동하지 않습니까?

14 번 참조 : Linux Crontab : 15 가지 멋진 Cron 작업 예


답변

이것에 대한 해결책도 찾지 못했습니다. 내가 괜찮은 해결책을 얻는 가장 가까운 것은 다음과 같습니다 ( https://raymii.org/s/tutorials/Better_cron_env_and_shell_control_with_the_SHELL_variale.html ).

  • cron 작업의 쉘을 변경하고 bash 스크립트를 가리 킵니다. 즉, cronjob 상단에 다음을 추가하십시오.
    SHELL=/path/to/setup/cron.bash
  • 이 쉘 스크립트에서 환경 변수를로드하고 다른 변수를 지정하십시오. 맨 위에 다음 4 줄을 포함 시키십시오. SHELL 변수를 bash로 재설정하고 bash 쉘을 실행하여 cronjob을 실행합니다.

예를 들면 다음과 같습니다.

#!/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=...모든 cronjob의 상단에을 지정해야합니다 . 거꾸로 : 일반 환경 변수를 사용하므로 cron과 다른 변수 사이의 변수를 일관되게 유지하는 것에 대해 걱정할 필요가 없습니다.


답변

루트가 될 수 있다면 /etc/init.d/cronPATH를 편집 하고 변경할 수 있습니까? 나는 이것을 테스트하지 않았지만 확인하는 것이 흥미로울 것입니다.


답변