Запуск задачи CRON каждые 30 секунд
4 апреля 2014 Linux 18022 просмотра
CRON как планировщик задач в UNIX-системах знаком почти каждому программисту, особенно, использующему LAMP стек. Обычно, вся работа с CRON заключается в настройке задач, а именно, периодичности выполнения. Время запуска команды указывается с точностью до минуты. Но что делать, если нам нужно запускать команду 2 раза за одну минуту, т.е. через каждые 30 секунд? Или же еще чаще?

Можно сказать, что стандартного решения у CRON нету, но решения есть всегда. Во-первых, можно один раз в минуту запускать скрипт (в нашем примере PHP код), в котором будет 2 запуска одного кода, с интервалом в 30 секунд. Эту паузу можно сделать функцией sleep().
<?php
function do() {
    // ...
}

do();
sleep(30);
do();
Я уже вижу, как вы меня осуждаете за такой код, но такой код имеет место быть. Минусом будет то, что мы не знаем, сколько будет выполняться функция do(), поэтому, возможно, в секунду 2 запуска команды не получится. Более правильным вариантом будет вне зависимости от команды запускать скрипт каждые 30 секунд. А именно, сделаем так, чтобы CRON запускал каждую минуту в одно время сразу 2 задачи, одна выполнялась в 0 секунд, а вторая через 30. Тут нам тоже поможет sleep, но уже в shell.
* * * * * /path/to/executable
* * * * * ( sleep 30; /path/to/executable )
Теперь не составит труда запускать задачу каждые 10 секунд или чаще.