Запуск 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 sec.
* * * * * 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 * * * * ~/bin/runEvery.sh 5 myScript.sh
задание Cron нельзя использовать для планирования задания в секундном интервале. я.вы не можете запланировать задание cron для запуска каждые 5 секунд. Альтернативой является написание сценария оболочки, который использует в нем.
создать сценарий оболочки every-5-seconds.sh использование цикла bash while, как показано ниже.
$ 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 &
in dir /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 секунд (три раза в минуту). Crontab line:
* * * * 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 и т. д...)
написать один скрипт создать .sh file
nano 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 .SH файл в каждые 1 мин и в .команда SH file выполняется 2 раза за 1 мин
Если вы хотите запустить скрипт в течение 5 секунд, замените 30 на 5 и измените цикл следующим образом:For (( i=1; i <= 12; i++ ))
когда вы выберите для любой секунды, затем вычислите 60 / вашу секунду и напишите для цикла
выполнить в цикле оболочки, например:
#!/bin/sh
counter=1
while true ; do
echo $counter
counter=$((counter+1))
if [[ "$counter" -eq 60 ]]; then
counter=0
fi
wget -q http://localhost/tool/heartbeat/ -O - > /dev/null 2>&1 &
sleep 1
done