每包Cronjobs

时间:2013-10-28 16:17:54

标签: python django crontab entry-point

到目前为止,我们手工管理服务器的crontabs。

我见过这个:

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

这是一个不错的django应用程序,因为你只需要编辑一次crontab。

您输入一次这样的行,并且将来软件更新就足够了,无需手动修改crontab来添加新作业。

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

我不喜欢这个:它需要django。

有人看到过没有这种“大”依赖关系的解决方案吗?

例如,使用EntryPoints查找每小时/每周/每月要完成的所有包的解决方案?

更新

所有cron作业都是按照linux用户安装的,而不是root用户。

2 个答案:

答案 0 :(得分:1)

依赖性最小的方法是简单地使用crontabrun-parts

首先,设置用户crontab以为每个计划运行脚本(例如crontab -e):

@hourly /path/to/run-hourly
@daily /path/to/run-daily
@weekly /path/to/run-weekly
@monthly /path/to/run-monthly

这类似于将每个脚本sym链接到Debian上的相应/etc/cron.{hourly,daily,weekly,monthly},但允许拥有用户运行它们而不是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}

第三,将任何所需的作业sym链接到相应的作业目录。如,

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"

答案 1 :(得分:0)

这取决于您的发行版如何配置cron,但您可能会有一个/etc/cron.d/目录。这是一个run-parts样式的目录,用于保存cron配置定义。

软件包可以在安装过程中删除文件,以启用特定于软件包的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)格式。