web-dev-qa-db-ja.com

自分のマシンでスケジュールされているすべてのcronジョブのリストを取得するにはどうすればよいですか?

私のシステム管理者は私のマシンにたくさんのcronジョブをセットアップしました。何が何時に予定されているのかを正確に知りたい。どうすればそのリストを入手できますか?

215
Frank

Linuxシステムの設定方法に応じて、以下を確認できます。

  • /var/spool/cron/*(ユーザーcrontabs)
  • /etc/crontab(システム全体のcrontab)

また、多くのディストリビューションには以下があります:

  • /etc/cron.d/*これらの構成の構文は/etc/crontabと同じです。

  • /etc/cron.hourly/etc/cron.daily/etc/cron.weekly/etc/cron.monthly

これらは単に、ディレクトリ名ごとに1時間ごと、毎日、毎週、または毎月実行される実行可能ファイルを含むディレクトリです。

その上で、atジョブ(/var/spool/at/*をチェック)、anacron(/etc/anacrontabおよび/var/spool/anacron/*)、そしておそらく私が忘れている他のものを使用できます。

150
jsbillings

ほとんどのクローン(例 Vixie-Cron -Debian/Ubuntuのデフォルト、Cronie-Fedoraのデフォルト、Solaris Cron ...)では、現在のユーザーのスケジュールされたcronジョブのリストを次のように取得します。

$ crontab -l

または別のユーザーのために

# crontab -l -u juser

すべてのユーザーのcrontabを取得するには、すべてのユーザーをループしてこのコマンドを呼び出します。

または、スプールファイルを検索することもできます。通常、これらは/var/spool/cronに保存されます。 vcronの次のディレクトリ

/var/spool/cron/crontabs

次の場所にあるシステム全体のcrontabを介してジョブを構成することもできるrootユーザーを除いて、すべてのユーザーのすべての構成済みcrontabが含まれています

/etc/crontab

cronie (Fedora/CentOSのデフォルト)を使用すると、システムcronジョブ用の.dスタイルの設定ディレクトリも存在します。

/etc/cron.d

(いつものように、.dディレクトリを使用すると、さまざまなパッケージの一部である構成エントリの管理が簡単になります。)

便宜上、ほとんどのディストリビューションには、リンク/保存されたスクリプトが定期的に実行されるディレクトリも用意されています。例:

/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly

これらのスクリプトのタイムリーな実行は、通常、システムのcrontabのrun-partsエントリまたは anacron を介して管理されます。

Systemd (例:Fedora、CentOS 7、...)を使用すると、定期的なジョブ実行を timer units でさらに構成できます。有効なシステムタイマーは、次の方法で表示できます。

$ systemctl list-timers

Root以外のユーザーは、タイマーが設定されているユーザーsystemdインスタンスも実行している可能性があることに注意してください。たとえば、Fedoraでは、デフォルトで、現在ログインしているユーザーごとにユーザーsystemdインスタンスが開始されます。これらは次の方法で認識できます。

$ ps aux | grep 'systemd[ ]--user'

これらのユーザータイマーは次の方法で一覧表示できます。

$ systemctl --user list-timers

list-timersコマンドを発行する代わりに、タイマーユニットファイル(パターン:*.timer)と、通常のシステムおよびユーザーのsystemd構成ディレクトリでそれらへのシンボリックリンクを検索することもできます。

$ find /usr/lib/systemd/ /etc/systemd -name '*.timer'
$ find /home '(' -path '/home/*/.local/share/systemd/user/*' \
              -o -path '/home/*/.config/systemd/*' ')' \
      -name '*.timer'  2> /dev/null

(通常のサービスユニットと同様に、タイマーユニットは、正しいsystemd configディレクトリにシンボリックリンクを作成することで有効になります。)

以下も参照してください。

149
maxschlepzig

特定のユーザーのすべてのcronを一覧表示します。

crontab -uユーザー名-l;

すべてのユーザーのすべてのcronをリストするには

スーパーユーザーとして実行します

#!/bin/bash
#List all cron jobs for all users
for user in `cat /etc/passwd | cut -d":" -f1`;
do 
crontab -l -u $user;
done