[linux] 프로그래밍 방식으로 새로운 크론 작업을 만들려면 어떻게해야합니까?

프로그래밍 방식으로 새로운 cron 작업을 추가하고 싶습니다.이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

에서 내 연구 , 내가 현재의 crontab을 덤프 다음의 crontab로 그 뒤를 배관, 새로운 하나를 추가 할 수있는 것 같다 :

(crontab -l ; echo "0 * * * * wget -O - -q http://www.example.com/cron.php") | crontab -

더 좋은 방법이 있습니까?



답변

그것은 항상 나를 위해 잘 작동했습니다.

세 가지 작업을 수행 할 수있는 약간 더 정교한 스크립트를 고려해야합니다.

  1. crontab 줄을 추가하십시오. 존재하지 않는 것을 보증합니다. 이미 존재할 때 추가하는 것은 좋지 않습니다.

  2. crontab 줄을 제거하십시오. 존재하지 않는 경우에만 경고합니다.

  3. crontab 라인을 대체하기 위해 위의 두 기능의 조합.


답변

루트로 실행중인 경우 가장 좋은 방법은 파일을 /etc/cron.d에 놓는 것입니다.

패키지 관리자를 사용하여 소프트웨어를 패키징하는 경우 해당 디렉토리에 파일을 간단히 배치 할 수 있으며 파일이 crontab 인 것처럼 해석되지만 사용자 이름에 대한 추가 필드는 다음과 같습니다.

파일 이름: /etc/cron.d/per_minute

함유량:
* * * * * root /bin/sh /home/root/script.sh


답변

OP의 솔루션에 버그가 있으므로 항목을 두 번 추가 할 수 있습니다. 아래를 사용하여 수정하십시오.

(crontab -l ; echo "0 * * * * your_command") | sort - | uniq - | crontab -


답변

cron에 무언가를 추가하려면

(crontab -l ; echo "0 * * * * hupChannel.sh") 2>&1 | grep -v "no crontab" | sort | uniq | crontab -

cron에서 이것을 제거하려면

(crontab -l ; echo "0 * * * * hupChannel.sh") 2>&1 | grep -v "no crontab" | grep -v hupChannel.sh |  sort | uniq | crontab -

희망은 누군가를 도울 것입니다


답변

무언가를 얻기 위해 일회성 시나리오를 위해 계획하고 있다면 ‘at’을 살펴보십시오.


답변

간단히 편집기를 tee 명령으로 변경하십시오.

export EDITOR="tee"
echo "0 * * * * /bin/echo 'Hello World'" | crontab -e


답변

crontab에 이미 항목이 있다고 가정하면 다음 명령이 비교적 잘 작동합니다. 있습니다 $CMD변수가 가독성 만이있다. 중복을 필터링하기 전에 정렬하는 것이 중요 uniq합니다. 인접한 행에서만 작동 하기 때문 입니다.

CMD='wget -O - -q http://www.example.com/cron.php"'
(crontab -l ; echo "0 * * * * $CMD") | sort | uniq | crontab -

현재 빈 crontab이있는 경우 stderr에 다음 오류가 표시됩니다.

no crontab for user

이것을 피하려면 약간의 복잡성을 추가하고 다음과 같이하십시오.

(crontab -l ; echo "0 * * * * $CMD") 2>&1 | sed "s/no crontab for $(whoami)//"  | sort | uniq | crontab -