단일 크론 작업에 대한 셸 지정

단일 크론 작업에 대한 셸 지정

루트로 실행해야 하고 기본 sh 셸 대신 bash가 필요한 cron 작업이 있습니다.

crontab 에는 정상적으로 실행되는 다른 작업이 있으며 파일 상단에 지정하여 작업이 중단되는 root위험을 감수하고 싶지 않습니다 .SHELL=/bin/bashcrontab

다른 기존 작업에 사용되는 셸을 변경하지 않고 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을 업데이트할 필요가 없습니다.

관련 정보