获取当前运行linux的所有cronjobs

时间:2017-09-14 13:15:22

标签: php linux cron centos7

我们的服务器上有很多cronjobs,正在寻找管理它们的方法。

我们已经介绍了许多功能,但有一点我还在努力,这是一种列出当前正在运行的所有cronjobs的方法。

以下是工作类型:

class Cronjob{

static private function stringToArray($jobs = '') {
    $array = explode("\n", trim($jobs)); // trim() gets rid of the last \r\n
    foreach ($array as $key => $item) {
        if ($item == '') {
            unset($array[$key]);
        }
    }
    return $array;
}


static public function getAllJobsRunning(){
    $output = shell_exec("ps -ef | grep apache");
    return self::stringToArray($output);
}
}

但这会返回更多任务,而不仅仅是像

这样的cronjobs
apache 6018 6015 0 Sep12 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
apache 6022 6015 0 Sep12 ? 00:00:08 /usr/sbin/httpd -DFOREGROUND
apache 6023 6015 0 Sep12 ? 00:00:07 /usr/sbin/httpd -DFOREGROUND
apache 7022 6015 0 14:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 8544 8485 0 14:41 pts/1 00:00:00 su apache
apache 8545 8544 0 14:41 pts/1 00:00:00 bash
apache 8642 8640 0 14:43 ? 00:00:00 /bin/sh -c /usr/bin/php /path_to_file/something.php > /var/log/cronlog/dailylogs.log 2>&1
apache 8643 8642 0 14:43 ? 00:00:04 /usr/bin/php /path_to_file/something.php
apache 11132 15438 0 14:58 ? 00:00:00 sh -c ps -ef | grep apache
apache 11133 11132 0 14:58 ? 00:00:00 ps -ef
apache 11134 11132 0 14:58 ? 00:00:00 grep apache
apache 11454 6015 0 Sep12 ? 00:00:06 /usr/sbin/httpd -DFOREGROUND
apache 15438 6015 0 11:29 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
apache 17761 6015 0 11:51 ? 00:00:01 /usr/sbin/httpd -DFOREGROUND
apache 18274 6015 0 Sep13 ? 00:00:06 /usr/sbin/httpd -DFOREGROUND
root 18911 11790 0 12:04 pts/0 00:00:00 su apache
apache 18912 18911 0 12:04 pts/0 00:00:00 bash
apache 21863 6015 0 12:42 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 24419 6015 0 Sep13 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
apache 24436 6015 0 Sep13 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND

虽然我只对以下内容感兴趣:

apache 8642 8640 0 14:43 ? 00:00:00 /bin/sh -c /usr/bin/php /path_to_file/something.php > /var/log/cronlog/dailylogs.log 2>&1
apache 8643 8642 0 14:43 ? 00:00:04 /usr/bin/php /path_to_file/something.php

现在我可以编写一个过滤掉我想要的行的正则表达式,但我想知道是否有更简单的方法来做到这一点。

1 个答案:

答案 0 :(得分:-1)

你只是想要一个有效的cronjobs列表或者实际上是活动吗?

如果要列出所有节目,请使用以下命令,而不是ps -ef | grep apache

获取所有用户的crontab:

for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l; done

获取特定用户的crontab

for user in $(cut -f1 -d: /etc/passwd); do echo $user; crontab -u $user -l; done