Как я могу проверить, работает ли мой cronjob на моем сервере через PHP?

Я нашел, что могу получить ожидаемые результаты следующим образом:

for (( i = 1; i <= 2; i++ ))
do
  NEW_NAME=SAMPLE$i
  echo ${!NEW_NAME}
done
2
23.09.2014, 17:29
3 ответа

Можно проанализировать вывод crontab -l видеть, присутствует ли конкретная crontab запись или нет. Что касается если cron работает или нет, можно проанализировать вывод a ps -eaf команда, чтобы видеть, если crond работает или нет.

$ ps -eaf|grep [c]rond
root      1705     1  0 May27 ?        00:00:03 crond

Вывод от crontab -l было бы что-то вроде этого:

$ crontab -l
0 12 * * * ls

Примечание: Можно использовать system() функция в PHP к инструментам строки команды вызова или exec().

РЕДАКТИРОВАНИЕ № 1

На основе Вашего комментария Вы могли сделать следующий PHP. Мой сценарий, cronstatus.php:

#!/usr/bin/php
<?php
exec("PATH=/usr/sbin:/usr/bin:/sbin:/bin; service crond status", $out, $ret);
print $ret . "\n";
?>

пример выполняется

$ sudo service crond stop
Stopping crond:                                            [  OK  ]
$ ./cronstatus.php 
3

$ sudo service crond start
Starting crond:                                            [  OK  ]
$ ./cronstatus.php 
0

Функция exec может возвратить вывод команды к переменной, $out и результаты состояния, возвращенного командой, это выполнилось в $ret.

3
27.01.2020, 22:06
  • 1
    Таким образом, как я назвал бы их в PHP для показа результата на веб-сайте? –  rubo77 06.06.2013, 13:11
  • 2
    $last_line = system('ls', $retval); или echo exec('whoami'); –  slm♦ 06.06.2013, 13:13
  • 3
    Это имеет смысл? –  slm♦ 06.06.2013, 13:17
  • 4
    это работает: exec("PATH=/usr/sbin:/usr/bin:/sbin:/bin; service cron status") Это показывает состояние, если крон работает, по крайней мере –  rubo77 27.06.2013, 00:56
  • 5
    Просто упоминание здесь: разрешение PHP сделать материал как "должностное лицо" и "система" является огромной проблемой безопасности. Это, среди других, должно быть перечислено под "disable_funtions = "в Вашем файле –  Andy 23.09.2014, 13:52

Если PHP может, вероятно, считать содержание /etc/crontab но обычно не содержание /var/spool/cron/crontabs/ необходимо ли было бы проанализировать строки, прежде всего, пропуская прокомментированный записи (то, что то, что Вы имеете в виду с 'определенным cronjob, не установлено в crontab'?).

Проверка, существует ли запись 'крона' в таблице процессов, должна быть возможной, но выясняющий если она, на самом деле делая что-то или не, возможно, более трудная.

На старой, несколько нестабильной машине машины я наследовался, cron иногда умирал бы. Я имел, устанавливают задачу, которая работала бы каждые 15 минут, уведомляя другую более надежную машину (по электронной почте). То, что другая машина выполнила бы cronjob, также проверяющий, прибыло ли электронное письмо меньше чем 15 минут назад. Если не то, что задание было бы, отправило мне уведомление на моем пейджере. Таким образом, я только получил бы сообщение, когда крон был мертв, не каждые 15 минут.

Вы могли установить что-то подобное, если у Вас есть вторая машина для работы с. Электронное письмо может содержать содержание любого crontab файла (даже от /var/spool/cron/crontabs/) и может проверить, включена ли необходимая команда все еще.

0
27.01.2020, 22:06

Более чистым и портативным решением будет проверка временной метки файла, который вы создадите с помощью cron специально для этой цели.

Создайте cronjob, который каждую минуту трогает файл, доступный для чтения веб-браузером, например:

* * * * *   www-data touch /var/www/cron-testfile

и проверьте временную метку с помощью php:

<?php
if(time() - filemtime('/var/www/cron-testfile') > 600) {
   echo "warning, cron not running";
}
?>
0
27.01.2020, 22:06

Теги

Похожие вопросы