다음은 활성화하려는 기존 크론입니다.
crontab -l
####Cron to auto restart MYAPP
###*/15 * * * * ansible-playbook /web/playbooks/detectMYAPP/va_action.yml | tee -a /web/playbooks/detectMYAPP/cron.out
애플리케이션 이름을 일치시켜 cron을 활성화하고 싶습니다.MYAPP
sed
동일한 목적을 달성하기 위해 다음 명령을 사용합니다 .
crontab -l> /web/playbooks/cronenabledisable/wladmin.cron
sed -i '/^#.*MYAPP/Is/^[#]*//' /web/playbooks/cronenabledisable/wladmin.cron
crontab /web/playbooks/cronenabledisable/wladmin.cron
####Cron to auto restart MYAPP
불행하게도 cron을 설치할 수 없다는 주석이 달린 섹션의 주석을 제거했습니다 .
문제가 있는 전류 출력:
Cron to auto restart MYAPP
*/15 * * * * ansible-playbook /web/playbooks/detectMYAPP/va_action.yml | tee -a /web/playbooks/detectMYAPP/cron.out
예상 출력:
####Cron to auto restart MYAPP
*/15 * * * * ansible-playbook /web/playbooks/detectMYAPP/va_action.yml | tee -a /web/playbooks/detectMYAPP/cron.out
MYAPP
참고: 댓글 섹션에 보관하고 싶습니다 . ####Cron to auto restart MYAPP
즉, 명명 규칙 때문에 간단히 제거할 수는 없습니다.
답변1
사용sed
$ sed -Ei.bak '/#+(\*.*myapp)/Is//\1/' input_file
####Cron to auto restart MYAPP
*/15 * * * * ansible-playbook /web/playbooks/detectMYAPP/va_action.yml | tee -a /web/playbooks/detectMYAPP/cron.out
-i.bak
롤백해야 할 경우를 대비해 백업 파일이 생성됩니다.
답변2
우선, GNU-sed의 "-i" 옵션을 사용하지 않는 것이 좋습니다! 위험한. 파일의 "인라인 편집"을 수행한다고 주장하지만 실제로는 자동으로 임시 파일을 편집하고 원본 파일을 대체합니다. 즉, 소유자나 그룹이 변경될 수 있고, inode 번호와 기타 메타 정보가 확실히 변경되며, 표준 방법과 달리 사용하는 임시 파일을 제어할 수 없습니다. 이는 시스템이 적절한(잘못된) 순간에 충돌할 때 문제가 될 수 있습니다. 이것은 귀하의 문제가 아닐 수도 있지만 POSIX도 이를 지원하지 않으므로 이식성이 없습니다.
sed
대신 처음부터(1970년 1월 1일 자정, 하하) 표준대로 하세요.
if sed '.....' /your/file > /path/to/tmpfile ; then
mv /your/file /your/file.bak # optional, create backup
mv /path/to/tmpfile /your/file
chown ..... # optionally adjust rights/ownership
chmod .....
fi
이제 문제를 해결하려면 다음과 같이 잘못된 정규식을 사용하세요.
/^#.*MYAPP/
여기 당신이 찾고 있습니다줄의 시작, "#", 임의 개수의 문자, 마지막으로 "MYAPP". sed는 항상 "최장 일치"("탐욕"이라고도 함)를 사용합니다. 즉, octothorpe로 시작하고 어디에서나 "MYAPP" 문자열이 있는 줄이 있으면 일치가 됩니다. 이 줄도 마찬가지입니다.
###*/15 * * * * ansible-playbook /web/playbooks/detectMYAPP/va_action.yml | tee -a /web/playbooks/detectMYAPP/cron.out
하지만 이런 것도 있습니다:
####Cron to auto restart MYAPP
예제 crontab이 중요한 경우 주석 처리된 코드 줄 앞에는 3개의 옥토소프만 있지만 주석에는 4개가 있으므로 해결책은 다음과 같습니다(관련 sed 코드만).
/^###[^#].*MYAPP/ s/^###//
이것은 처음에 정확히 3개의 옥토소프가 있는 줄에서만 작동합니다(3개의 옥토소프 뒤에 비옥토소프가 옵니다. "[^#]"는 "#"을 제외한 모든 것과 일치합니다). 그 뒤에는 줄의 아무 곳에나 "MYAPP"이 옵니다. 이 줄에서 처음 3개의 옥토소프는 어떤 것으로도 대체되지 않습니다(예: 삭제됨).