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


201

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


3
これは質問に対する答えではなく、ベストプラクティスに関するメモにすぎません。一つはできるため、ユーザーごとのcronジョブとしてこれらを設定するrootか、apacheまたは何が、一つはすべき使用/etc/crontab(ほとんどのディストリビューションでは、より良い)、または/etc/cron.d/etc/cron.[timeframe]
mattdm


私はで有用な程度にこれを自動化するスクリプトを掲載している: - stackoverflow.com/questions/134906/...それは完璧ではないですが、おそらく需要の90%をカバーしています。これは、bashで記述しないことの良い例です。
デビッド・コリアー

回答:


143

Linuxシステムのセットアップ方法に応じて、以下を確認できます。

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

また、多くのディストリビューションには次のものがあります。

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

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

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

その上で、あなたは仕事(check /var/spool/at/*)、anacron(/etc/anacrontaband /var/spool/anacron/*)、そしておそらく私が忘れている他の仕事をすることができます。


4
おかげで、私はそれらを見つけました/etc/cron.daily。そのdailyファイルはどのように機能しますか?毎日のジョブは何時に実行されますか?私のマシンでは正午頃に実行されているようですが、代わりにシステム管理者にそれを真夜中に変更する方法を教えてください。
フランク

5
cron.dailyはから呼び出されます/etc/crontab。たとえば、私のUbuntuシステムで25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )は、午前6時25分を意味します。
コフ

cron.dailyは、さらにデータポイントが必要な場合、RHEL5システムの/ etc / crontabからも呼び出されます。
jsbillings

新しいFedora(おそらくRHEL6-まだ調べていない)では、cronieデーモンはの設定を使用するものを処理します/etc/anacrontab
mattdm

時々それもあり/var/cronます。
CMCDragonkai 14年

135

ほとんどのCrons(たとえば、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が含まれています-システム全体のcrontabを介してジョブを構成することもできるrootユーザーを除く

/etc/crontab

cronie(Fedoraの/ CentOSの上のデフォルト)、そこにある.dだけでなく、システムのcronジョブのためのスタイルのconfigディレクトリには:

/etc/cron.d

(いつものように、.dディレクトリは異なるパッケージの一部である構成エントリの維持を簡素化します。)

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

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

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

にsystemd(Fedoraの上など、CentOSの7、...)定期的なジョブの実行は、さらに介して設定することができ、タイマーユニット。有効なシステムタイマーは、次の方法で表示できます。

$ systemctl list-timers

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

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

これらのユーザータイマーは、次の方法でリストできます。

$ systemctl --user list-timers

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

$ 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ディレクトリにシンボリックリンクを作成することにより、タイマーユニットが有効になります。)

こちらもご覧ください:


私は投票しませんでした。しかし、私は試しましたcrontab -l -u root(私が実行することについて知りたいcronジョブのためroot)、それは私が使用する権限を持っていないと言います-u
フランク

3
次に、十分な特権(つまり、rootユーザー)で呼び出す必要があります。
maxschlepzig

2
まだ完全ではありません-cronの一部のバージョンは、/ etc / crontabから呼び出されるヘルパープログラムなしで、/ etc / cron.dおよび/etc/cron.{daily,hourly,monthly,weekly}からジョブを実行します。
mattdm

2
@maxschlepzig-常にではありません。そして、質問は「どうすればすべての cronジョブのリストを取得できますか」です。「さて、ここにいくつかあります」という返信は答えではありません。
mattdm

1
@maxschlepzig — cronieFedoraおよびRHEL6に同梱されているように/etc/crontab、を参照せず、代わりにを使用します/etc/anacrontab。構成ファイルでこれらを参照していない実際の実装について誤解される可能性があります。(しかし、その後、私もどちらもダウン票しませんでした。...私はただ言っているだけです。)
mattdm

5

指定されたユーザーのすべての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

1
OPはすべての cronジョブのリストを要求しています。
Dravスローン

1
何らかの理由で/etc/cron.d/ジョブが表示されません。
ジャムシッド

動いていない。「www-dataのcrontabなし」。ただし、ユーザー名www-dataは存在します。
ミシャノン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.