프로그래밍 방식으로 새로운 cron 작업을 추가하고 싶습니다.이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
에서 내 연구 , 내가 현재의 crontab을 덤프 다음의 crontab로 그 뒤를 배관, 새로운 하나를 추가 할 수있는 것 같다 :
(crontab -l ; echo "0 * * * * wget -O - -q http://www.example.com/cron.php") | crontab -
더 좋은 방법이 있습니까?
답변
그것은 항상 나를 위해 잘 작동했습니다.
세 가지 작업을 수행 할 수있는 약간 더 정교한 스크립트를 고려해야합니다.
-
crontab 줄을 추가하십시오. 존재하지 않는 것을 보증합니다. 이미 존재할 때 추가하는 것은 좋지 않습니다.
-
crontab 줄을 제거하십시오. 존재하지 않는 경우에만 경고합니다.
-
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 -