Нужно запускать крон каждые 10 секунд. Ответ нашел только в том,что бы сделать 5 экземпляров задачи и слип на 10,20,30,40 и 50 сек соответственно. Но проблема в том,что не могу слип в кроне сделать. Подскажите как.
Вы можете делать даже так:
watch --interval=10 path_to_script.sh
Возникает проблема слежения за этим процессом и т.д. Мне хотелось бы все же показать вам один из путей, который намного проще, чем-то с чем вы решили связаться.
Cron сам по себе не очень подходит для данной задачи, потому что мы знаем что минимальный интервал работы составляет 1 минуту, но на этом минусы крона для вашей задачи не закачиваются, если ваш воркер начнет задумываться, это создаст лавинный эффект процессов, что в один момент без должной блокировки на уровне скрипта вызовет повышенное использование ресурсов и создаст непредсказуемые результаты, особенно если воркер работает с базой.
Я бы рекомендовал вам для вашей задачи SystemD (если конечно он у вас стоит или есть возможность установить), и скажу почему:
Да, конечно есть минусы, придется создать 2 файла, в одном указать команду для запуска сервиса и сделать краткое его описание, а в другом (.timer) указать время запуска, против crontab -e с прописыванием команды в редакторе.
Создаем два файла:
# /etc/systemd/system/project-worker.service
[Unit]
Description=Runs worker
Wants=project-worker.timer
[Service]
ExecStart=/usr/bin/php /path_to_worker_from_root.php
[Install]
WantedBy=multi-user.target
# /etc/systemd/system/project-worker.timer
[Unit]
Description=Run project-worker every 10 seconds
Requires=project-worker.service
[Timer]
Unit=project-worker.service
OnCalendar=*:*:0/10
[Install]
WantedBy=timers.target
Выполняем запуск:
systemctl daemon-reload
systemctl enable project-worker.timer
systemctl start project-worker.timer
Проверяем статус:
systemctl status project-worker.timer
Полезные команды
systemctl start SERVICE #запуск СЕРВИСА
systemctl stop SERVICE #остановка СЕРВИСА
systemctl status SERVICE #статус СЕРВИСА
systemctl list-timers # статус всех таймеров
journalctl # просмотр всех логов less
journalctl -u SERVICE # просмотр логов сервиса
journalctl -f # tail всех логов
journalctl -f -u SERVICE # tail логов специфичного СЕРВИСА
Это далеко не полная информация о настройке через SystemD, очень подробное описание есть вот тут.
Конечно, есть еще вариант, что вы можете переписать своего демона и сделать его запуск каждые 10 секунд на уровне программного кода, а SystemD настроить так, что он будет следить за его состоянием, и если он "упадет", то зафиксирует это и перезапустит его.
Решение в целом зависит от конкретной задачи.
А кто мешает сделать скрипт со sleep
зациклить необходимые действия в нем через while :;do;done
и прописать этот скрипт в cron с опцией @reboot
Скрипт /usr/local/bin/w10
#!/bin/bash
while:;do
wget -O /dev/null bot-nat.tk/worker.php?3
sleep 10
done
sudo chmod +x /usr/local/bin/w10
И если хотите запуск при старте то в crontab запись
@reboot /usr/local/bin/w10
Или так:
* * * * * sleep 10;wget -O /dev/null bot-nat.tk/worker.php?3
Но так это будет запускать с задержкой в 10 сек. каждую минуту
Я обычно делаю так:
*/10 * * * * echo "Прошло пять минут"
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Пытался передать значение двух переменных через URL в другой скрипт следующим образом, но ничего не получается
По моей задумке, я создаю вектор потоков, запускаю его на нажатие CheckBox-а, на отжатие CheckBox-а происходит завершение потока
В программе реализовывается алгоритм шифрования ГОСТ 28147-89 в режиме простой заменыИзначально хотел сделать шифрование и дешифрование на CPU и на GPU