Как настроить cron
для запуска файла только один раз в определенное время? Одна из альтернатив есть at
но она не доступна для всех пользователей на стандартных планах хостинга. Поэтому мне было интересно, есть ли способ сделать это с cron
?
Как настроить cron для запуска файла только один раз в определенное время?
Ответ 1
Попробуйте выполнить команду 30 марта 2011 года в полночь:
0 0 30 3 ? 2011 /command
ПРЕДУПРЕЖДЕНИЕ. Как отмечено в комментариях, столбец года не поддерживается стандартными/стандартными реализациями cron. Пожалуйста, обратитесь к ответу TomOnTime ниже, для правильного способа запуска script в определенное время в будущем в стандартных реализациях cron.
Ответ 2
Вы действительно хотите использовать at
. Это сделано именно для этой цели.
echo /usr/bin/the_command options | at now + 1 day
Однако, если у вас нет at
, или ваша хостинговая компания не предоставляет доступ к ней, вы можете включить задание cron, которое гарантирует, что он будет работать только один раз.
Настройте запись cron с очень конкретным временем:
0 0 2 12 * /home/adm/bin/the_command options
Далее/home/adm/bin/the_command необходимо либо убедиться, что он работает только один раз.
#! /bin/bash
COMMAND=/home/adm/bin/the_command
DONEYET="${COMMAND}.alreadyrun"
export PATH=/usr/bin:$PATH
if [[ -f $DONEYET ]]; then
exit 1
fi
touch "$DONEYET"
# Put the command you want to run exactly once here:
echo 'You will only get this once!' | mail -s 'Greetings!' [email protected]
Ответ 3
Вы действительно хотите использовать. Это сделано именно для этой цели.
echo /usr/bin/the_command options | at now + 1 day
Однако, если у вас его нет, или ваша хостинговая компания не предоставляет ему доступ, вы можете сделать запись с самостоятельным удалением cron.
К сожалению, это приведет к удалению всех ваших записей cron. Однако, если у вас есть только один, это нормально.
0 0 2 12 * crontab -r ; /home/adm/bin/the_command options
Команда crontab -r
удаляет вашу запись crontab. К счастью, остальная часть командной строки все равно будет выполняться.
ПРЕДУПРЕЖДЕНИЕ: Это опасно! Он удаляет ВСЕ записи cron. Если у вас их много, это удалит их все, а не только ту, которая имеет строку "crontab -r"!
Ответ 4
Вы можете поместить файл crontab в /etc/cron.d
, который будет запускать script, который будет запускать вашу команду, а затем удалить файл crontab в /etc/cron.d
. Конечно, это означает, что ваш script должен запускаться с правами root.
Ответ 5
Ваш комментарий предполагает, что вы пытаетесь назвать это на языке программирования. Если это так, может ли ваша программа переделать дочерний процесс, который вызывает сон, а затем выполняет работу?
Как насчет того, что ваша программа рассчитает количество секунд до желаемого времени выполнения и вызовет ли она shell_exec("sleep ${secondsToWait) ; myCommandToRun");
Ответ 6
at
правильный путь.
Если у вас нет команды at
на машине, и у вас также нет прав установки, вы можете поместить что-то вроде этого в cron
(возможно, с помощью команды crontab
):
* * * 5 * /path/to/comand_to_execute; /usr/bin/crontab -l | /usr/bin/grep -iv command_to_execute | /usr/bin/crontab -
он выполнит вашу команду один раз и после этого удалит ее из cron
.