2009-07-16 161 views
3

我在通过cron每小时运行的服务器上有这个bash脚本。我非常高兴,但现在用户希望能够通过Web界面配置频率。允许用户配置cron

我不觉得舒服地操纵cron配置编程,但我不确定其他选项是否更好。

我看到它的方式,我可以:

  • 安排一个脚本来运行一次一分钟,检查它是否真的应该运行“现在”
  • 放弃的cron完全和使用守护程序是它自己的调度程序。这可能意味着在Python
  • 重写剧本......或者它从Web界面吸吮和操纵cron配置(用Python编写的BTW)

我该怎么办?

编辑:澄清,我担心操纵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 

从Web界面,我让用户选择这四个选项,并根据用户的选择,我写入字符串2_hours/1_hour/30_minutes/10_minutes纳入档案/home/username/settings/run.freq

我不喜欢它,但它似乎是最好的选择。

回答

10

为用户提供诸如每分钟,每5分钟,每半小时等合理选择...并将这些值转换为cron作业字符串。这是用户友好的,禁止用户直接篡改cron作业字符串。

+0

听起来不错,我希望客户会对它满意。 – 2009-07-16 09:03:38

0

Webmin怎么样?我从来没有用过它,但似乎你可以配置cron模块,并给予想要配置作业的用户权限。

+0

这真是太过分了,恐怕 – itsadok 2009-07-16 10:23:47

+0

是的,这是解决小问题的一个很好的解决方案。它可能比任何“本土”设置和维护都更快。当然,这很大程度上取决于您当前的环境。 – WMR 2009-07-16 10:38:22

0

我用的好东西是主要的脚本开始由cron每一分钟。这个脚本检查触及的文件。如果文件在那里,主cron脚本启动一个函数/下标。您只需触摸一个已定义的文件并在完成时触摸“rm -f”即可。如果您希望以其他方式开始工作,则可以获得更多的并发证明。然后,您可以使用您最喜爱的网络编程语言来处理您的用户计划...

主要脚本的样子:

[...] 

if [ -e "${tag_archive_log_files}" ]; then 
    archive_log_files ${params} 
    rm -f ${tag_archive_files} 
fi 

if [ -e "${tag_purge_log_files}" ]; then 
    purge_log_files ${params} 
    rm -f ${tag_purge_log_files} 
fi 

[...] 
0

我发现,可以操纵的cron信息对我的模块。它被称为python-crontab,它可用于easy_install。从source

Example Use: 

from crontab import CronTab 

tab = CronTab() 
cron = tab.new(command='/usr/bin/echo') 

cron.minute().during(5,50).every(5) 
cron.hour().every(4) 

cron2 = tab.new(command='/foo/bar',comment='SomeID') 
cron2.every_reboot() 

list = tab.find('bar') 
cron3 = list[0] 
cron3.clear() 
cron3.minute().every(1) 

print unicode(tab.render()) 

for cron4 in tab.find('echo'): 
    print cron4 

for cron5 in tab: 
    print cron5 

tab.remove_all('echo') 

t.write() 

(我一直在google搜索“的cron”,但没有找到任何东西,我缺少的关键词是“的crontab”)。

我现在正在决定是否使用这个或只是用一个基于python的调度程序完全替换cron。