Как написать в 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 вечера.

Другие вопросы по тегам