依存関係が最も少ない方法は、単純にcrontab
andを利用することrun-parts
です。
まず、ユーザーの crontab をセットアップして、各スケジュール (例crontab -e
: )に対してスクリプトを実行します。
@hourly /path/to/run-hourly
@daily /path/to/run-daily
@weekly /path/to/run-weekly
@monthly /path/to/run-monthly
これは、これらの各スクリプトをそれぞれの/etc/cron.{hourly,daily,weekly,monthly}
Debian にシンボリック リンクするのと似ていますが、所有ユーザーが root の代わりにスクリプトを実行できるという利点があります。
次に、ジョブを実行する各スクリプトを定義します。最も単純なケースでは、各スクリプトは を使用run-parts
して、指定されたディレクトリ内のすべての実行可能なジョブ スクリプトを実行できます。
#!/bin/bash
#/path/to/run-hourly
run-parts /path/to/hourly/jobs
#!/bin/bash
#/path/to/run-daily
run-parts /path/to/daily/jobs
#!/bin/bash
#/path/to/run-weekly
run-parts /path/to/weekly/jobs
#!/bin/bash
#/path/to/run-monthly
run-parts /path/to/monthly/jobs
各スクリプトには、実行権限も設定する必要があります。
chmod +x /path/to/run-{hourly,daily,weekly,monthly}
3 番目に、任意のジョブをそれぞれのジョブ ディレクトリにシンボリック リンクします。例えば、
chmod +x /path/to/job
ln -s /path/to/job /path/to/daily/jobs/
または、プロジェクトごとに共通のディレクトリでジョブを検索するように、各スケジュール スクリプトを定義することもできます。/path/to/projects
各プロジェクトが下にあり、各プロジェクトに子孫があると仮定するとjobs/{hourly,daily,weekly,monthly}
、次/path/to/run-hourly
のように定義できます。
#!/bin/bash
#/path/to/run-hourly
JOBS=$(find /path/to/projects -type f -path '*/jobs/hourly/*')
while read -r JOB; do
"$JOB"
done <<< "$JOBS"