web-dev-qa-db-ja.com

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

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

4
SKM

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

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

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

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

また、/etc/cron.hourlyとその仲間がDebianに実装される方法と同様のことを行うこともできます。メインの/etc/crontabには、次のようなルールが含まれています。

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

複数のプログラムを実行するために、単一のcrontabエントリーを用意することができます。 Debianのrun-parts dirfor f in dir/* ; do "$f" ; doneに似ていますが、編集者などによって作成されたバックアップファイルが実行されないように、奇妙なファイル名をスキップする点が異なります。

4
ilkkachu

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

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

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

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

実際のエントリを読んですぐに新しいエントリを追加するだけです。
これを実行したら:

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 -

これでうまくいきます。お役に立てば幸いです。

0
Clement