cron PATH를 전역 적으로 (모든 사용자에 대해) 영구적으로 설정하는 방법은 무엇입니까?


10

모든 사용자의 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

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
심지어 크론 다시 시작한 후, 우분투에서 작동하지 않습니다
그로서의를

1
@grosser : 글쎄요. 전체 crontab을 작성하고 (답을 편집하십시오) 출력과 출력이 작동하지 않는 이유를 함께 게시하십시오. 그럼 우리는 ...
sleske

또한 VARIABLE = value 행의 형식은 쉘 스크립트보다 다소 제한되어 있습니다. 각 지정은 고유 한 행에 있어야하며 오른쪽에 변수를 사용할 수 없습니다 (예 : PATH = $ PATH : / bla가 작동하지 않습니다).
sleske

나는 개인의 crontab에 경로를 설정, 질문을 업데이트에게 한 일,하지 않았다 업무 단지 글로벌 변화
그로서의

필요한 각 크론 탭에서 PATH 변수를 지정하십시오. 보안 문제로 인한 것일 수 있습니다. 우분투의 BTW (확인했습니다) PATH는 우분투의 / etc / crontab 및 /etc/cron.d/anacron에 정의되어 있습니다. 따라서 / etc / crontab에서 상속되지 않은 것 같습니다. root의 crontab ( sudo crontab -e) 에서 정의 해보십시오
igorp1024


1

이것에 대한 해결책도 찾지 못했습니다. 내가 괜찮은 해결책을 얻는 가장 가까운 것은 다음과 같습니다 ( 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과 다른 변수 사이의 변수를 일관되게 유지하는 것에 대해 걱정할 필요가 없습니다.


0

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


작동하지 않았다, 난 그냥 = XXX /etc/init.d/cron 만에 PATH를 추가 * * * * * $ PATH 출력이 동일 에코
그로서의
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.