Я хотел бы автоматизировать cronjob (значение расписания задание, которое будет сделано из сценария оболочки). Таким образом, у меня есть сценарий, который делает это
#!/bin/ksh
timestamp=$(date +%H%M%S)
if [ "$timestamp" -eq 230000 ]; then
write to cronjob to execute the same script @ 11:00 PM
fi
таким образом, вывод должен быть похожим ниже, действительно ли это возможно?
00 23 2 10 2 /home/test/run_cron.sh
Я предполагаю, что Вы только хотите быть добавленными к crontab
ОДНАЖДЫ. Поэтому нужно удалить сценарий из crontab
во-первых:
#!/bin/ksh
myname="$0"
(crontab -l | grep -E -v "$myname";echo " 0 23 \* \* \* $myname") |\
crontab -
Привет и мог Спросить Ubuntu!
Можно записать в crontab
через stdin
:
echo '0 23 * * * /home/test/run_cron.sh' | crontab -
Оборотная сторона - то, что это очищает все предыдущее crontab
записи.
Если уже необходимо сохранить существующие записи (и не запуститься с нуля), что-то вроде этого должно работать:
echo "$(crontab -l ; echo '0 23 * * * /home/test/run_cron.sh')" | crontab -
Из комментариев и Вашего обновленного вопроса я читал, Вы хотите запустить свой скрипт не каждый день в 23:00, но только однажды на следующий день в 23:00. В то время как это возможно с cron
Я предлагаю использовать at
задание вместо этого.
При добавлении cronjob для этого мы должны были бы вычислить дату следующего дня (для установки чего-то как 0 23 2 10 * …
на 2 октября), и с другой стороны удаляют это cronjob на следующий день. Как сказано: возможный, но громоздкий. Следовательно, at
задание. Вы, возможно, должны установить at
команда через sudo apt install at
.
Синтаксис at
немного удивительно: команда, которая будет выполнена, не дана в качестве параметра, но считана из stdin, таким образом, мы должны передать его по каналу в at
. Некоторые примеры:
echo "ls -l > out1.txt" | at now + 2 minutes
echo "ls -l > out2.txt" | at 23:00
echo "ls -l > out3.txt" | at tomorrow
В Вашем случае:
echo "./test-script.sh" | at 23:00
Это будет работать test-script.sh
в следующий раз это - 23:00.