5

これまで、サーバーの crontab を手動で管理していました。

私はこれを見ました:

http://django-extensions.readthedocs.org/en/latest/jobs_scheduling.html

crontab を一度編集するだけでよいので、これは素晴らしい django アプリです。

このような行を一度入力すれば、将来はソフトウェアの更新で十分です。手動で crontab を変更して新しいジョブを追加する必要はありません。

@hourly /path/to/my/project/manage.py runjobs hourly

これについて私が気に入らない点: Django が必要です。

そのような「大きな」依存関係を持たないソリューションを見た人はいますか?

たとえば、EntryPoints を使用して、時間/週/月ごとに実行する必要のあるすべてのパッケージを見つけるソリューションはありますか?

アップデート

すべての cron ジョブは、root としてではなく、Linux ユーザーごとにインストールされます。

4

2 に答える 2

1

依存関係が最も少ない方法は、単純にcrontabandを利用すること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"
于 2014-08-27T02:29:23.220 に答える
0

これは、ディストリビューションで cron がどのように構成されているかによって異なりますが、/etc/cron.d/ディレクトリがある可能性があります。これは、run-partscron 構成定義を保持する 形式のディレクトリです。

パッケージは、インストール中にそこにファイルをドロップして、パッケージ固有の cron ジョブを有効にすることができます。

たとえば、私の Ubuntu マシンでは次のようになります。

[jk@pecola ~]$ ls /etc/cron.d/
anacron  php5

[jk@pecola ~]$ cat /etc/cron.d/php5 
# /etc/cron.d/php5: crontab fragment for php5
#  This purges session files older than X, where X is defined in seconds
#  as the largest value of session.gc_maxlifetime from all your php.ini
#  files, or 24 minutes if not defined.  See /usr/lib/php5/maxlifetime

# Look for and purge old sessions every 30 minutes
09,39 *     * * *     root   [ -x /usr/lib/php5/maxlifetime ] && [ -x /usr/lib/php5/sessionclean ] && [ -d /var/lib/php5 ] && /usr/lib/php5/sessionclean /var/lib/php5 $(/usr/lib/php5/maxlifetime)

個々のファイルは標準の crontab(5) 形式です。

于 2014-08-27T02:44:11.123 に答える