스크립트를 통해 crontab을 편집하는 방법에 대한 많은 문서가 있다는 것을 알고 있습니다. 다음을 사용하여 항목을 추가하여 이 작업을 수행할 수 있었습니다.
line="* * * * * /my/folder/script.sh"
( crontab -l ; echo "$line" ) | crontab -
그러나 나와 다른 몇몇 사람들은 crontab의 수퍼유저 아래에 자체 "섹션"을 가지고 있습니다.
SPECIAL_JOB
다른 사람의 섹션과 항목을 방해하지 않도록 포함 줄 아래와 같이 키워드나 문자열 아래에 이 줄을 삽입하려면 어떻게 해야 합니까 ? 나는 crontab 하단에 새로운 작업을 계속 추가하고 싶지 않습니다.
cron 항목은 다음과 같습니다.
# SPECIAL_JOB
* * * * * /my/folder/script.sh
이상적으로는 다음을 사용하여 단일 새 항목을 유지하기 위해 해당 줄의 이전 항목을 삭제합니다.
#remove entry
crontab -l | grep -ve '/my/folder/script.sh' | crontab -
답변1
그러면 # SPECIAL_JOB
모든 행 뒤에 문자열이 삽입됩니다 $line
.
crontab -l | sed '/# SPECIAL_JOB/a'"$line" | crontab -
답변2
텍스트의 특수 문자를 바꾸는 데 따른 문제를 피하기 위해 새 cron 항목을 example이라는 파일에 넣은 다음 new-entry
다음을 사용합니다.
{ crontab -l | sed '/^# SPECIAL_JOB/{
n
r /path/to/new-entry
d
}' } | crontab -
(
)
서브쉘 괄호를 간단한 중괄호로 약간 변경했습니다 {
. }
왜냐하면 실제로 서브쉘을 만들 필요가 없기 때문입니다.
그런 다음 sed를 사용하여 들어오는 텍스트를 구문 분석합니다. 로 시작하는 줄을 찾은 # SPECIAL_JOB
다음 세 가지 작업을 수행합니다.
- 현재 줄을 인쇄하고 다음 줄을 읽습니다. (
# SPECIAL_JOB
인쇄 가능) r
파일에서 작업 읽기d
그런 다음 이전 행# SPECIAL_JOB
(이전 작업)을 삭제합니다.
답변3
더 큰 규모로 ansible을 사용하는 것이 좋습니다.