ㅤ
Ниже пара функций, которые позволяют это сделать. И если с добавлением вообще проблем не возникает
{ 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'a, потом разделитель.
Затем задание было удалено. Это видно по последним трем строкам.
В комментариях задания пробелы заменяются на "_" для упрощения работы c sed.
Ну, и на всякий пожарный напомню, что для корректной работы с cron нужно задать переменную PATH либо в crontab, либо в скрипте.
tags: #bash #linux © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgate