Как написать в cronjob из сценария оболочки
Я хотел бы автоматизировать 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
3 ответа
Привет и добро пожаловать в Ask 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 -
Я предполагаю, что вы хотите быть добавлены только в crontab ОДИН РАЗ. Поэтому необходимо удалить сценарий из crontab первый:
#!/bin/ksh
myname="$0"
(crontab -l | grep -E -v "$myname";echo " 0 23 \* \* \* $myname") |\
crontab -
Из комментариев и вашего обновленного вопроса, который я прочитал, вы хотите запускать свой скрипт не каждый день в 11 вечера, а только один раз на следующий день в 11 вечера. Хотя это возможно с cron Я предлагаю использовать at работа вместо
При добавлении cronjob для этого нам нужно рассчитать дату следующего дня (чтобы настроить что-то вроде 0 23 2 10 * … на 2 октября), а затем снова удалите этот cronjob на следующий день. Как сказано: возможно, но громоздко. Следовательно, at работа. Возможно, вам придется установить at команда через sudo apt install at,
Синтаксис at Это немного удивительно: команда, которую нужно запустить, не дается как параметр, а читается из стандартного ввода, поэтому нам нужно передать ее в 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 в следующий раз это 11 вечера.