Я видел несколько решений, включая часы и простой запуск скрипта цикла (и сна) в фоновом режиме, но ничего не было идеальным.
У меня есть сценарий, который нужно запускать каждые 15 секунд, и, поскольку cron не поддерживает секунды, мне осталось выяснить что-то еще.
Какой самый надежный и эффективный способ запускать скрипт каждые 15 секунд в unix? Скрипт также необходимо запустить после перезагрузки.
Ответы:
Я бы использовал cron для запуска сценария каждую минуту и заставлял этот сценарий запускать ваш сценарий четыре раза с 15-секундным сном между запусками.
(Предполагается, что ваш скрипт быстро запускается - в противном случае вы можете настроить время сна.)
Таким образом, вы получите все преимущества,
cron
а также 15-секундный период бега.Изменить: см. Также комментарий @bmb ниже.
источник
Если вы настаиваете на запуске скрипта из cron:
и замените имя и путь вашего скрипта на / foo / bar / your_script
источник
* * * * * sleep 15; php /foo/bar/your_script
#!/usr/bin/php
в начало вашего php-скрипта и сделать его исполняемымМодифицированная версия вышеперечисленного:
добавить в / etc / crontab:
источник
Разве это не работает в фоновом режиме?
Это примерно так же эффективно, как и получается. Важная часть выполняется только каждые 15 секунд, а в остальное время скрипт спит (таким образом, не тратя циклы).
источник
&
в конце строки 3. В любом случае, как есть, это не выполняется каждые 15 секунд. Это выполняется каждые «15 секунд + сколько бы времени ниecho hello
длилось». Что может быть 0,01 секунды; может быть 19 часов.Планировщик писал быстрее, чем cron. Я также реализовал защиту от перекрытия. Вы можете настроить планировщик так, чтобы он не запускал новый процесс, если предыдущий все еще выполняется. Взгляните на https://github.com/sioux1977/scheduler/wiki
источник
Используйте nanosleep (2) . Он использует структуру,
timespec
которая используется для указания интервалов времени с точностью до наносекунды.источник
источник
После моего предыдущего ответа я придумал другое решение, которое отличается и, возможно, лучше. Этот код позволяет процессам выполняться более 60 раз в минуту с точностью до микросекунд. Для этого вам понадобится программа usleep. Должно быть до 50 раз в секунду.
источник
Чтобы избежать возможного дублирования выполнения, используйте механизм блокировки, как описано в этом потоке .
источник