스크립트를 통해 키워드 또는 문자열 뒤에 crontab에 줄을 삽입하는 방법

스크립트를 통해 키워드 또는 문자열 뒤에 crontab에 줄을 삽입하는 방법

스크립트를 통해 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다음 세 가지 작업을 수행합니다.

  1. 현재 줄을 인쇄하고 다음 줄을 읽습니다. ( # SPECIAL_JOB인쇄 가능)
  2. r파일에서 작업 읽기
  3. d그런 다음 이전 행 # SPECIAL_JOB(이전 작업)을 삭제합니다.

답변3

더 큰 규모로 ansible을 사용하는 것이 좋습니다.

관련 정보