как записать в 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
0
задан 2 October 2018 в 11:12

3 ответа

Я предполагаю, что Вы только хотите быть добавленными к crontab ОДНАЖДЫ. Поэтому нужно удалить сценарий из crontab во-первых:

#!/bin/ksh
myname="$0"  

(crontab -l | grep -E -v "$myname";echo " 0 23 \* \* \* $myname") |\
    crontab -
2
ответ дан 27 October 2019 в 09:29

Привет и мог Спросить 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 -
1
ответ дан 27 October 2019 в 09:29

Из комментариев и Вашего обновленного вопроса я читал, Вы хотите запустить свой скрипт не каждый день в 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.

0
ответ дан 27 October 2019 в 09:29

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

Похожие вопросы: