crontab PATH 변수를 설정하는 방법 / sbin이

crontab에서 스크립트를 실행하는 데 문제가있었습니다. 일부 연구 후 PATH 매개 변수에 / sbin이 포함되어 있지 않기 때문에 문제가 있음을 이해했습니다.

/ etc / crontab에 포함 된 내용을 살펴 보았습니다.

PATH=/sbin:/bin:/usr/sbin:/usr/bin

테스트로 PATH 변수를 인쇄하는 간단한 크론 작업 :

* * * * * echo $PATH &> /root/TMP.log

출력은 다음과 같습니다

cat /root/TMP.log
/usr/bin:/bin

이 동작을 이해하지 못합니다 … PATH 변수를 어떻게 설정합니까? 또는 더 나은 방법-경로를 추가하는 방법은 무엇입니까?



답변

사용자 crontab (crontab -e를 사용하여 편집)은 비슷하지만 시스템 crontab (/ etc / crontab을 편집하여 편집)과 다른 경로를 유지합니다.

시스템 crontab에는 7 개의 필드가 있으며 명령 앞에 사용자 이름을 삽입합니다. 반면에 사용자 crontab에는 6 개의 필드 만 있으며 시간 필드 바로 뒤에 명령으로 직접 이동합니다.

마찬가지로 시스템 crontab의 PATH에는 일반적으로 / sbin 디렉토리가 포함되지만 사용자 crontab의 PATH에는 포함되지 않습니다. 사용자 crontab에 대해 PATH를 설정하려면 사용자 crontab에서 PATH 변수를 정의해야합니다.


cron에서 쉘 명령에 일반 PATH를 추가하는 간단한 해결 방법은 로그인 쉘에서 bash를 실행하여 cronjob이 프로파일을 소스하도록하는 것입니다. 예를 들어

* * * * * some command

대신 실행할 수 있습니다

* * * * * bash -lc some command

이렇게하면 프로파일이 PATH 또는 기타 환경 변수를 특별한 것으로 설정하면 명령에도 포함됩니다.


답변

기본 시스템 전체 PATH 및 기타 ENV 변수 (/etc/profile.d에 정의 됨)가 필요한 경우 다음을 입력하십시오.

* * * * * . /etc/profile; your cmd


답변

cronjob 라인 또는 단일 라인에서 PATH (또는 다른 매개 변수)를 설정할 수 있습니다. 그러나 같은 쉘 확장을 사용할 수 없습니다 PATH=$PATH:/usr/local/bin. 그러나 물결표는 홈 디렉토리 바로 가기에 허용됩니다.

책에서 :

crontab의 활성 줄은 환경 설정 또는 cron 명령입니다. 환경 설정의 형식은 다음과 같습니다. name = value 여기서 등호 (=) 주위의 공백은 선택 사항이며 값의 선행 공백이 아닌 공백은 name에 지정된 값의 일부입니다. 선행 또는 후행 공백을 유지하기 위해 값 문자열을 따옴표 (단일 또는 이중이지만 일치)로 배치 할 수 있습니다.

자세한 내용 man 5 crontab은 참조하십시오.

따라서 이것은 작동해야합니다.

PATH=/bin:/usr/bin:/my/path/bin
5 3 * * * command_that_requires_my_path


답변

나는 같은 문제가 있었고 crontab에서 스크립트를 실행하는 다른 방법을 찾았습니다. 프로그램을 실행하는 가장 쉬운 방법은 프로그램 디렉토리로 cd 할 수있는 스크립트를 만드는 것 입니다. 그런 다음 해당 스크립트에서 프로그램을 호출하십시오.

다음은 스크립트의 예입니다 (스크립트 이름 = launcher.sh).

#!bin/bash
cd /home/pi/test
sudo python3 example.py

그런 다음 스크립트를 실행 가능하게 만드십시오.

chmod 755 launcher.sh

그리고 마지막으로 스크립트를 crontab에 추가하십시오.

crontab -e

이 줄을 끝에 추가하십시오.

@reboot sh /home/pi/test/launcher.sh

(재부팅 할 때마다 프로그램이 실행되도록 설정했습니다)


답변