2017-09-14 13 views
0

私たちはサーバー上にたくさんのcronジョブを持っており、それらを管理する方法を探しています。現在linuxを実行しているすべてのcronジョブを入手してください

多くの機能がカバーされていますが、まだ動作しているのは、現在実行中のすべてのcronジョブを一覧表示する方法です。

以下はの仕事の種類を行います。

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); 
} 
} 

をしかし、これはより多くのタスクなどだけでなく、cronジョブを返し

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

のためのcrontabは '/パス/に/ cronsに固有のものが含まれているfile'思いなさい? '/ my path/to/crons'のように? – delboy1978uk

+0

ええ、そうです。私は確かにその情報でそれを確認することができますが、私はcronjobsを返すだけのコマンドがないかと思います。たとえば、クロンジョブを実行するだけの別個のユーザーを作成して、そのユーザーのタスクを要求するとcronジョブが返されると思っていました。しかし、おそらく他にも優れたソリューションがありますか? –

+0

いいえ、 'ps'はデーモン、cronジョブ、またはユーザーとして起動したかどうかを示すことなく、実行中のプロセスをリストします。あなたができることは、crontabから得た定義済みのcronジョブのリストと、実行中のプロセスを比較することです。 cronジョブ用に別のユーザーを使用することもできますが、異なるcronジョブに異なる権限を割り当てる柔軟性が失われます。 –

答えて

-1

予定されているcronjobのリストや実際にはアクティビティのリストが必要ですか?

すべてのスケジュールを一覧表示する場合は、ps -ef | grep apacheのisnteadを使用してください。

は、すべてのユーザーのcrontabファイルを取得します。

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

特定のユーザー

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

実際にはアクティビティ –

+0

実行中のタスクと、私が与えたコマンドでcrontabから取り出すタスクを比較する必要があります。それらを区別する他の方法はありません。 –

関連する問題