Запуск cron каждые 30 секунд - PullRequest
248 голосов
/ 08 марта 2012

Хорошо, у меня есть 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?

Ответы [ 16 ]

4 голосов
/ 10 марта 2016

Задание 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
1 голос
/ 06 марта 2018

Спасибо за все хорошие ответы.Для простоты мне понравилось смешанное решение с управлением crontab и разделением времени в скрипте.Вот что я сделал для запуска сценария каждые 20 секунд (три раза в минуту).Строка Crontab:

 * * * * 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 
0 голосов
/ 18 ноября 2018

В настоящее время я использую метод ниже.Работает без проблем.

* * * * * /bin/bash -c ' for i in {1..X}; do YOUR_COMMANDS ; sleep Y ; done '

Если вы хотите запускать каждые N секунд, тогда X будет 60 / N и Y будет N .

Спасибо.

0 голосов
/ 02 августа 2018

написать один сценарий оболочки, создать .sh файл

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 файл запускается 2 раза за 1 минуту

если вы хотите запустить скрипт в течение 5 секунд, замените 30 на 5 и измените цикл следующим образом: For (( i=1; i <= 12; i++ ))

при выборе для любой секунды вычислите 60 / свою секунду и напишите в Forпетля

0 голосов
/ 13 июля 2018

Запуск в цикле оболочки, пример:

#!/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
0 голосов
/ 21 февраля 2018

Я только что выполнил аналогичную задачу и использовал следующий подход:

nohup watch -n30 "kill -3 NODE_PID" &

Мне нужно было периодически убивать -3 (чтобы получить трассировку стека программы) каждые 30 секунд в течение несколькихч.

nohup ... & 

Это здесь, чтобы быть уверенным, что я не потеряю выполнение наблюдения, если потеряю оболочку (проблема с сетью, сбой Windows и т. д.) *

...