是否可以配置 cron(在 Linux 上)从签入应用程序的文件中读取用户 crontab?

是否可以配置 cron(在 Linux 上)从签入应用程序的文件中读取用户 crontab?

我想要一组像 /etc/ 中的每小时、每天、每周的文件,但针对我运行的每个应用程序。

我希望 cron 能够查看

/srv/www/*/current/config/cron对他们来说。

这样我就可以将新的 Rails 应用程序添加到 /srv/www,并让 cron 在下次运行时获取新作业。

这是一厢情愿吗?

答案1

您是否尝试为每个 rails 应用程序创建与 cron.hourly、cron.daily、cron.weekly 和 cron.monthly 目录相同的目录,其中包含脚本?如果是这样,根据 John 的说法,如果您将以下内容添加到 /etc/crontab,您将获得所需的结果:

01 * * * * root for i in /srv/www/*/current/config/cron.hourly ; do run-parts "$i" > /dev/null 2>&1 ; 完成
02 4 * * * root for i in /srv/www/*/current/config/cron.daily ; do run-parts "$i" > /dev/null 2>&1 ; 完成
22 4 * * 0 root for i in /srv/www/*/current/config/cron.weekly ; do run-parts "$i" > /dev/null 2>&1 ; 完成
42 4 1 * * root for i in /srv/www/*/current/config/cron.monthly ; do run-parts "$i" > /dev/null 2>&1 ; 完成

然后,每个应用程序只需指定它所需的 cron.X 目录的子集并用相关脚本填充它。

但是如果您希望为每个应用程序的每个频率提供一个可选脚本,那么您可能需要执行以下操作:

01 * * * * root for i in /srv/www/*/current/config/cron.hourly ; 执行 [ -x "$i" ] && "$i" ; 完成
02 4 * * * root for i in /srv/www/*/current/config/cron.daily ; 执行 [ -x "$i" ] && "$i" ; 完成
22 4 * * 0 root for i in /srv/www/*/current/config/cron.weekly ; 执行 [ -x "$i" ] && "$i" ; 完成
42 4 1 * * root for i in /srv/www/*/current/config/cron.monthly ; 执行 [ -x "$i" ] && "$i" ; 完成

再次强调,这只会针对指定它们的应用程序运行。

其中之一就是您在寻找的吗?

答案2

让 cron 每小时、每天等执行一个辅助程序,并让该程序确定是否有工作要做

答案3

典型的 crontab 将包含如下条目

# run-parts
01 * * * * root run-parts /etc/cron.hourly > /dev/null 2>&1
02 4 * * * root run-parts /etc/cron.daily > /dev/null 2>&1
22 4 * * 0 root run-parts /etc/cron.weekly > /dev/null 2>&1
42 4 1 * * root run-parts /etc/cron.monthly > /dev/null 2>&1

我不是专家,但看不出有什么理由不能以同样的方式在其中添加其他目录。如果您希望它更加自动化,您可以定期运行脚本以从您选择的根目录开始查找 cron.* 目录,并以编程方式将这些路径添加到 /etc/crontab(如果它们尚不存在)。

答案4

首先,创建一个如下 Bash 脚本:

#!/bin/bash
for web_job in /srv/www/*/current/config/cron/*;
 do [ -x $web_job  ] && $web_job || : ;
done

将其保存为 /srv/www/run_web_jobs.sh 之类的内容。然后,将其添加为 cron 作业。例如,要使其每天运行(必须是 root):

$ ln -s /etc/cron.daily/ /srv/www/run_web_jobs.sh

或者,将其添加到用户的 crontab。

$ crontab -e

相关内容