Я нашел, что могу получить ожидаемые результаты следующим образом:
for (( i = 1; i <= 2; i++ ))
do
NEW_NAME=SAMPLE$i
echo ${!NEW_NAME}
done
Можно проанализировать вывод 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()
.
На основе Вашего комментария Вы могли сделать следующий 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
.
Если PHP может, вероятно, считать содержание /etc/crontab
но обычно не содержание /var/spool/cron/crontabs/
необходимо ли было бы проанализировать строки, прежде всего, пропуская прокомментированный записи (то, что то, что Вы имеете в виду с 'определенным cronjob, не установлено в crontab'?).
Проверка, существует ли запись 'крона' в таблице процессов, должна быть возможной, но выясняющий если она, на самом деле делая что-то или не, возможно, более трудная.
На старой, несколько нестабильной машине машины я наследовался, cron
иногда умирал бы. Я имел, устанавливают задачу, которая работала бы каждые 15 минут, уведомляя другую более надежную машину (по электронной почте). То, что другая машина выполнила бы cronjob, также проверяющий, прибыло ли электронное письмо меньше чем 15 минут назад. Если не то, что задание было бы, отправило мне уведомление на моем пейджере. Таким образом, я только получил бы сообщение, когда крон был мертв, не каждые 15 минут.
Вы могли установить что-то подобное, если у Вас есть вторая машина для работы с. Электронное письмо может содержать содержание любого crontab файла (даже от /var/spool/cron/crontabs/
) и может проверить, включена ли необходимая команда все еще.
Более чистым и портативным решением будет проверка временной метки файла, который вы создадите с помощью cron специально для этой цели.
Создайте cronjob, который каждую минуту трогает файл, доступный для чтения веб-браузером, например:
* * * * * www-data touch /var/www/cron-testfile
и проверьте временную метку с помощью php:
<?php
if(time() - filemtime('/var/www/cron-testfile') > 600) {
echo "warning, cron not running";
}
?>
$last_line = system('ls', $retval);
илиecho exec('whoami');
– slm♦ 06.06.2013, 13:13exec("PATH=/usr/sbin:/usr/bin:/sbin:/bin; service cron status")
Это показывает состояние, если крон работает, по крайней мере – rubo77 27.06.2013, 00:56