2017-09-14 53 views
0

我們的服務器上有很多cronjobs,正在尋找管理它們的方法。獲取當前正在運行linux的所有cronjobs

許多功能已被覆蓋,但仍有一件事仍在繼續,這是一種列出當前正在運行的所有cronjob的方法。

下做這項工作種類:

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 

現在我可以編寫一個過濾掉我想要的行的正則表達式,但我想知道是否沒有更簡單的方法來執行 這個。

+0

會'/路徑/到/ file'包含任何獨特的crons?像'/我的路徑/到/ crons'? – delboy1978uk

+0

嗯,是的,它的確如此。我確實可以用這些信息來檢查它,但我想知道是否沒有隻返回cronjob的命令。例如,我想我可以創建一個只運行cronjob的獨立用戶,以便請求該用戶的任務只會返回cronjob。但也許還有其他更好的解決方案? –

+0

不,'ps'列出正在運行的進程,沒有任何指示它是作爲守護進程,cronjob還是由用戶啓動的。你可以做的是比較你從crontabs獲得的定義的cron作業列表與正在運行的進程。使用單獨的用戶執行cron作業可能會有效,但您將失去將不同權限分配給不同cronjob的靈活性。 –

回答

-1

你只想要sheduled cronjobs的列表或實際上的活動?

如果要列出所有shedules,請使用以下命令而不是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 
+0

其實活動 –

+0

您將不得不使用我提供的命令將正在運行的任務與從crontab中取出的任務進行比較。沒有其他方法可以區分它們。 –

相關問題