Порой бывает необходимо прямо из Bash-скрипта добавить или удалить какое-нибудь задание в cron.
Ниже пара функций, которые позволяют это сделать. И если с добавлением вообще проблем не возникает:
{ crontab -l; echo '#@reboot echo BashDays >/tmp/BashDays.txt' ; } | crontab -
ИЛИ:
{ crontab -l; echo '#*/10 * * * 5 echo BashDays >>/tmp/BashDays.txt' ; } | crontab -
Можно, конечно, и так, но вдруг одинаковых заданий может быть несколько и их нужно будет как-то различать.
Всё очень просто. Просто добавь воды комментарий. Для каждой задачи задаёшь разные комменты, и тогда без проблем можно удалять задачи.
#!/bin/bash
function ADD_CRON_TASK(){
local CRON_TASK=${1:-'#'}
local COMMENT=${2:-$(date +%s)}
COMMENT=${COMMENT// /_}
{ crontab -l 2>/dev/null; echo "$CRON_TASK #$COMMENT"; } | crontab -
}
function REMOVE_CRON_TASK(){
if [[ $# -eq 0 ]]; then
echo No comment to remove cron task >&2
return
fi
COMMENT=${1// /_}
crontab -l 2>/dev/null | sed '/#'$COMMENT'$/d' | crontab -
}
CRON_TASK='#@reboot reboot'
COMMENT="My litle joke"
ADD_CRON_TASK "$CRON_TASK" "$COMMENT"
crontab -l | tail -3
echo '###################################################'
REMOVE_CRON_TASK "$COMMENT"
crontab -l | tail -3
Если запустить программу, увидите что-то типа:
#
# m h dom mon dow command
# @reboot reboot #My_litle_joke
#############################
# For more information see the
#
# m h dom mon dow command
Видно, что программа добавила задание, вывела последние три строки crontab’а, потом разделитель.
Затем задание было удалено. Это видно по последним трём строкам.
В комментариях задания пробелы заменяются на _ для упрощения работы с sed.
PATH либо в crontab, либо в скрипте.© by Tagd Tagd








Комментарии