Сценарий оболочки для записей crontab

Esta es la razón por la que usar CAPSpara nombres de variables en Bash es una muy mala idea .

Si hubiera utilizado snake_caseo CamelCase, no habría alterado la variable ambiental PATH.

Por lo tanto:

path=/app/oracle/admin/DB/$1

está bien

PATH=/app/oracle/admin/DB/$1

no lo es.

Ejecutar

( set -o posix ; set )

para ver cuántas variables puede anular erróneamente con CAPSvariables. En lugar de tratar de realizar un seguimiento de ellos, simplemente tómalo como una regla general para no usar CAPS.

0
25.07.2019, 09:58
1 ответ

Вы хотите удалить определенную запись crontab и заменить ее другой.

Вы можете сбросить существующее расписание crontab в текстовый файл, используя

crontab -l >crontab-old.txt

Предполагая, что вы знаете, что существующая запись crontab точно

*/15 * * * * /bin/sh /opt/myscript/myscript.sh > /tmp/myscript.check.out 

(без дополнительных пробелов нигде )вы можете отфильтровать это из файла crontab-old.txtс помощью

grep -v -x -F '*/15 * * * * /bin/sh /opt/myscript/myscript.sh > /tmp/myscript.check.out' crontab-old.txt >crontab-new.txt

Чтобы добавить новое расписание в файл crontab-new.txt, вы можете

cat <<'END_ENTRY' >>crontab-new.txt
*/30 2,4,6 * * * /bin/sh /opt/myscript/myscript2.sh > /tmp/myscript2.check.out 
END_ENTRY

И, наконец, вы загружаете новое расписание с помощью

crontab crontab-new.txt

Теперь у вас есть crontab-old.txtсо старым расписанием и crontab-new.txtс новым расписанием, и вы загрузили новое расписание.

Очевидно, что вам следует просматривать файлы в -между каждым описанным выше шагом, чтобы убедиться, что в них внесены правильные изменения, если вы выполняете это вручную или когда вы разрабатываете сценарий для сделай это.

В скрипте это может выглядеть так

#!/bin/sh

crontab -l >crontab-old.txt

grep -v -x -F '*/15 * * * * /bin/sh /opt/myscript/myscript.sh > /tmp/myscript.check.out' crontab-old.txt >crontab-new.txt

cat <<'END_ENTRY' >>crontab-new.txt
*/30 2,4,6 * * * /bin/sh /opt/myscript/myscript2.sh > /tmp/myscript2.check.out 
END_ENTRY

crontab crontab-new.txt

Команда grepиспользует -Fдля сопоставления заданного шаблона как строки , а не как регулярное выражение. Шаблон содержит символы *, которые являются специальными в регулярных выражениях, поэтому использование -Fпозволяет нам сопоставить строку без специальной обработки. Я также использую -x, который заставляет успешные совпадения сопоставляться по полной строке от начала до конца, а не по частям строк.

Также связанные:

0
28.04.2021, 23:31

Теги

Похожие вопросы