Esta es la razón por la que usar CAPS
para nombres de variables en Bash es una muy mala idea .
Si hubiera utilizado snake_case
o 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 CAPS
variables. En lugar de tratar de realizar un seguimiento de ellos, simplemente tómalo como una regla general para no usar CAPS
.
Вы хотите удалить определенную запись 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
, который заставляет успешные совпадения сопоставляться по полной строке от начала до конца, а не по частям строк.
Также связанные: