允许用户配置cron

3 投票
5 回答
704 浏览
提问于 2025-04-15 12:56

我在服务器上有一个每小时运行一次的bash脚本,是通过cron来定时的。我之前对此很满意,但现在用户希望能通过网页界面来设置运行频率。

我对通过程序来修改cron配置不太放心,但也不确定其他选项是否更好。

我觉得我可以选择:

  • 安排一个脚本每分钟运行一次,检查一下是否真的该“现在”运行
  • 完全放弃cron,使用一个自己的调度程序的守护进程。这可能意味着需要把脚本重写成python
  • ...或者硬着头皮从网页界面修改cron配置(顺便说一下,网页是用python写的)

我该怎么办呢?

补充说明:我之所以对修改cron感到不安,主要是因为这基本上是文本操作,没有验证,如果我搞错了,其他的cron任务就都不能运行了。

最后我做了这个:

根据stefanw的建议,我在我的bash脚本顶部添加了以下一行:

if [ ! `cat /home/username/settings/run.freq` = $1 ]; then
    exit 0
fi

我设置了以下cron任务:

0 */2 * * *             /home/username/scripts/publish.sh 2_hours
@hourly                 /home/username/scripts/publish.sh 1_hour
*/30 * * * *            /home/username/scripts/publish.sh 30_minutes
*/10 * * * *            /home/username/scripts/publish.sh 10_minutes

在网页界面上,我让用户在这四个选项中选择,然后根据用户的选择,把字符串 2_hours/1_hour/30_minutes/10_minutes 写入到 /home/username/settings/run.freq 文件中。

我并不是特别喜欢这样,但看起来这是最好的选择。

5 个回答

0

那Webmin怎么样呢?我自己没用过,但看起来你可以设置一个叫做cron的模块,并且给想要配置任务的用户权限。

3

你可以使用一个Python的调度库,这些库已经帮你做了大部分工作:

10

给你的用户一些合理的选择,比如每分钟、每5分钟、每半小时等等,然后把这些选择转换成一个cron作业的字符串。这样做比较人性化,也能防止用户直接修改cron作业的字符串。

撰写回答