1 人のユーザーが複数の crontab ファイルを持つことはできますか?

1 人のユーザーが複数の crontab ファイルを持つことはできますか?

2 つの crontab ファイルを作成するとします。

  1. /tmp/my-crontab
  2. /root/my-alternate-crontab

各 crontab ファイルは、異なるスクリプトを実行するようにスケジュールされます。

cronjob を開始すると、最初のジョブが古いジョブに置き換えられます。

crontab -u smarak /tmp/my-crontab
crontab -u smarak /root/my-alternate-crontab

上記は単一のユーザーで可能ですか?

答え1

単一の crontab を回避する 2 つの方法。

crontab エントリを などのディレクトリ内のファイルに保存し、次のコマンドで~/crontab.d/thisandthat.cronそれらの変更をシステム crontab にコミットします。

cat ~/crontab.d/*.cron | crontab -

この拡張機能.cronは、エディターからのバックアップ ファイルが誤って含まれないようにするためのものです。すべてのファイルが連結されるため、ファイル内で設定された変数は、後から追加されるファイルにも適用されることに注意してください。

また、Debian での などの実装方法と似たようなことを実行することもできます/etc/cron.hourly。 main には/etc/crontab次のようなルールが含まれています。

17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly

複数のプログラムを実行するために、単一の crontab エントリを設定することもできます。Debian の はrun-parts dirに似ていますがfor f in dir/* ; do "$f" ; done、奇妙なファイル名をスキップします。これも、エディタなどで作成されたバックアップ ファイルの実行を避けるためです。

答え2

いいえ。各ユーザーには crontab が 1 つあります。なぜでしょうか? crontab は、単一のユーザーに関連付けられたすべての cron ジョブの「テーブル」(「タブ」) であるためです。

で複数のものを実行したい場合はcron、crontab に複数の行を追加するだけです。

cron ジョブ仕様を含む複数のファイルがある場合は、それらを連結するだけです。

cat crontab1 crontab2 crontab3 >my-crontab
crontab my-crontab

答え3

実際のエントリを読み取り、その直後に新しいエントリを追加することができます。
これを実行したら、次のようになります。

crontab -u smarak /tmp/my-crontab

理想的には、次のようなことができます。

crontab -u smarak <(cat /root/my-alternate-crontab) <(crontab -l)

しかし、crontab は上記の形式を受け入れないようです。そのため、回避策は次のとおりです。

cat /root/my-alternate-crontab <(crontab -l)| crontab -u smarak -

これは私にとってはうまくいきました。お役に立てば幸いです。

関連情報