Запуск cron каждые 30 секунд
хорошо, поэтому у меня есть cron, который мне нужно запускать каждые 30 секунд...вот что у меня есть ниже
*/30 * * * * /bin/bash -l -c 'cd /srv/last_song/releases/20120308133159 && script/rails runner -e production '''Song.insert_latest''''
это работает, но это 30 минут или 30 секунд...а также я читал, что cron может быть не лучшим инструментом для использования, если я запускаю его так часто. Есть ли другой лучший инструмент, который я могу установить на ubuntu 11.04, который будет лучшим вариантом или есть способ исправить выше cron
14 ответов:
у вас есть
*/30
на минут спецификатор-это означает каждую минуту, но с шагом 30 (другими словами, каждые полчаса). Так какcron
не идет вниз к югу минутах резолюций, вам придется найти другой способ.одна возможность, хотя это немного kludge, состоит в том, чтобы иметь два задания, одно смещение на 30 секунд:
* * * * * /path/to/executable param1 param2 * * * * * ( sleep 30 ; /path/to/executable param1 param2 )
и cron задания фактически выполняются каждую минуту, но последний будет ждать полминуты до выполняя "мясо" задания,
/path/to/executable
.
вы не можете. Cron имеет детализацию 60 сек.
* * * * * cd /srv/last_song/releases/20120308133159 && script/rails runner -e production '\''Song.insert_latest'\'' * * * * * sleep 30 && cd /srv/last_song/releases/20120308133159 && script/rails runner -e production '\''Song.insert_latest'\''
детализация Cron находится в минутах и не было предназначен для пробуждения каждого
x
секунд, чтобы запустить что-то. Запустите повторяющуюся задачу в цикле, и она должна делать то, что вам нужно:#!/bin/env bash while [ true ]; do sleep 30 # do what you need to here done
нет необходимости в двух записях cron, вы можете поместить его в один с:
* * * * * /bin/bash -l -c "/path/to/executable; sleep 30 ; /path/to/executable"
Так что в вашем случае:
* * * * * /bin/bash -l -c "cd /srv/last_song/releases/20120308133159 && script/rails runner -e production '\''Song.insert_latest'\'' ; sleep 30 ; cd /srv/last_song/releases/20120308133159 && script/rails runner -e production '\''Song.insert_latest'\''"
вы можете проверить мой ответ этот же вопрос
в принципе, я включил туда сценарий bash с именем "runEvery.sh" который вы можете запускать с cron каждые 1 минуту и передавать в качестве аргументов реальную команду, которую вы хотите запустить, и частоту в секундах, в которой вы хотите ее запустить.
как то так
*/1 * * * * ~/bin/runEvery.sh 5 myScript.sh
задание Cron нельзя использовать для планирования задания с интервалом в несколько секунд. т. е. вы не можете запланировать выполнение задания cron каждые 5 секунд. Альтернативой является написание сценария оболочки, который использует в нем.
создать сценарий оболочки every-5-seconds.sh используя bash в то время как цикл, как показано ниже.
$ cat every-5-seconds.sh #!/bin/bash while true do /home/ramesh/backup.sh sleep 5 done
теперь выполните этот сценарий оболочки в фоновом режиме с помощью
nohup
как показано ниже. Это будет продолжать выполнять сценарий даже после выхода из сеанса. Эта воля выполняйте ваши backup.sh сценарий оболочки каждые 5 секунд.$ nohup ./every-5-seconds.sh &
в направлении
/etc/cron.d/
создать файл
excute_per_30s
* * * * * yourusername /bin/date >> /home/yourusername/temp/date.txt * * * * * yourusername sleep 30; /bin/date >> /home/yourusername/temp/date.txt
будет работать cron каждые 30 секунд
использовать fcron (http://fcron.free.fr/) - дает вам детализацию в секундах и способ лучше и богаче функциями, чем cron (vixie-cron) и стабильный тоже. Раньше я делал глупые вещи, такие как около 60 PHP-скриптов, работающих на одной машине в очень глупых настройках, и он все еще делал свою работу!
задание Crontab можно использовать для планирования задания в минутах / часах / днях, но не в секундах. Альтернатива:
создать скрипт для выполнения каждые 30 секунд:
#!/bin/bash # 30sec.sh for COUNT in `seq 29` ; do cp /application/tmp/* /home/test sleep 30 done
использовать
crontab -e
и crontab для выполнения этого скрипта:* * * * * /home/test/30sec.sh > /dev/null
Спасибо за все хорошие ответы. Чтобы сделать его простым, мне понравилось смешанное решение, с контролем на crontab и временным разделением на скрипте. Так вот что я сделал, чтобы запускать скрипт каждые 20 секунд (три раза в минуту). Кронтаб строку:
* * * * 1-6 ./a/b/checkAgendaScript >> /home/a/b/cronlogs/checkAgenda.log
сценарий:
cd /home/a/b/checkAgenda java -jar checkAgenda.jar sleep 20 java -jar checkAgenda.jar sleep 20 java -jar checkAgenda.jar
у меня просто была аналогичная задача, чтобы сделать и использовать следующий подход:
nohup watch -n30 "kill -3 NODE_PID" &
мне нужно периодически убивать -3 (чтобы получить трассировку стека программы) каждые 30 секунд в течение нескольких часов.
nohup ... &
это здесь, чтобы быть уверенным, что я не потеряю выполнение часов, если я потеряю оболочку (сетевая проблема, сбой windows и т. д...)
написать один скрипт создавать .Ш. файлом
нано every30second.sh
и написать скрипт
#!/bin/bash For (( i=1; i <= 2; i++ )) do write Command here sleep 30 done
затем установите cron для этого скрипта crontab-e
(* * * * * /home/username/every30second.sh)
этот cron call. sh файл в каждые 1 мин & в команде. SH file выполняется 2 раза в 1 мин
Если вы хотите запустить скрипт в течение 5 секунд, то замените 30 на 5 и измените цикл следующим образом:
For (( i=1; i <= 12; i++ ))
когда вы выберите для любой секунды, затем вычислите 60 / вашу секунду и запишите для цикла