루트로 실행해야 하고 기본 sh 셸 대신 bash가 필요한 cron 작업이 있습니다.
crontab 에는 정상적으로 실행되는 다른 작업이 있으며 파일 상단에 지정하여 작업이 중단되는 root
위험을 감수하고 싶지 않습니다 .SHELL=/bin/bash
crontab
다른 기존 작업에 사용되는 셸을 변경하지 않고 bash를 사용하여 내 cron 작업이 실행되도록 지정하려면 어떻게 해야 합니까?
나는 이와 같은 줄이 트릭을 수행할 수 있다고 생각 0 * * * * SHELL=/bin/bash myjob
하지만 CentOS에 대한 cron 문서에서는 이에 대한 언급을 찾을 수 없습니다.
또한 내 작업(파일의 마지막 변수) 전에 SHELL 변수를 설정하면 작동할 수도 있다고 생각했지만 환경 변수 배치의 효과와 문서 순서대로 할당되었는지 아니면 그냥 할당되었는지에 대한 문서를 찾을 수 없습니다. 위치에 관계없이 전역으로 간주됩니다(또는 모든 작업 이전이 아닌 경우 오류가 발생할 수 있음).
작업에 따라 셸을 지정할 수 있나요?
답변1
쉘을 지정하는 가장 직접적인 방법은 쉘의 실행 파일을 호출하는 것입니다. 예를 들어, myjob
using이라는 명령을 실행하려면 bash
다음 명령줄과 같은 것을 사용합니다.
/bin/bash -c 'myjob'
해당 crontab 항목은 다음과 같습니다.
0 * * * * /bin/bash -c 'myjob'
또는 myjob
스크립트인 경우 다음 명령줄과 같은 것을 사용할 수 있습니다.
/bin/bash '/path/to/myjob'
해당 crontab 항목은 다음과 같습니다.
0 * * * * /bin/bash '/path/to/myjob'
답변2
쉘 스크립트 인 경우 실행 가능하고 -라인이 스크립트 파일에 대한 올바른 인터프리터(예: )를 지정하는지 myjob
확인하십시오 . 그게 다야.#!
#!/bin/bash
일련의 명령이라면 다음을 배치하는 것이 좋습니다.그것들bash
스크립트 에서 #!
위와 같이 적절한 -line을 사용합니다.
이렇게 하면 crontab 항목을 올바르게 가져오는 세부 사항(스크립트를 실행할 시기 제외)에 대해 너무 많이 걱정할 필요가 없습니다. 또한 Python, Perl 또는 기타 셸 변형에서 스크립트를 다시 구현할 때 cronjob을 업데이트할 필요가 없습니다.