Подтвердить что ты не робот

Как настроить cron для запуска файла только один раз в определенное время?

Как настроить cron для запуска файла только один раз в определенное время? Одна из альтернатив есть at но она не доступна для всех пользователей на стандартных планах хостинга. Поэтому мне было интересно, есть ли способ сделать это с cron?

4b9b3361

Ответ 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.