crontab PATH 변수를 설정하는 방법


17

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 변수를 어떻게 설정합니까? 또는 더 나은 방법-경로를 추가하는 방법은 무엇입니까?

답변:


17

사용자 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 만 설정할 수 있으며 편집 할 수는 없습니다. PATH = / sbin : $ PATH 또는 이와 유사한 기능이 작동하지 않기 때문입니다. 나는 시도했다
csny

예, 이와 같은 경우에는 처음부터 PATH를 정의해야합니다. 이는 crontab에서 실행되는 모든 명령을 알고 있으므로이를 고려하면됩니다.

@madumlao bash -lc는 도움이되지 않습니다. 지금은 PATH를 수동으로 설정하는 것이 좋지만 일부 스크립트를 설치하면 전체 경로를 지정하지 않고 cronjobs에서 스크립트를 인식하기를 원합니다. 나는 그것이 어떻게 든 가능 bash -lc하고 해결책으로가는 길에 확신합니다 :)
csny

4
bash -lc는 사용자의 프로필을 제공하는 로그인 쉘을 시작합니다. 이것은 ~ / .bash_profile, ~ / .profile 또는 ~ / .bashrc에 설정된 PATH를 사용한다는 것을 의미합니다. 경로가 설정되어 있습니까? 그렇다면 제대로 작동하지 않으면 답을 업데이트하십시오
madumlao

큰. 감사합니다 Madunlao. bin 파일 폴더를 ~ / .bash_profile에 수동으로 추가 한 후 cronjob이 제대로 작동합니다.
张健健

8

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

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

3

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

0

나는 같은 문제가 있었고 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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.