我在服务器上有这个bash脚本,每小时运行一次,通过cron。我非常高兴,但现在用户希望能够通过网络界面配置频率。
我不习惯以编程方式操作cron配置,但我不确定其他选项是否更好。
我看到它的方式,我可以:
我该怎么办?
编辑:澄清一下,我担心操纵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
的文件中。
我不喜欢它,但它似乎是最好的选择。
答案 0 :(得分:10)
为用户提供一些合理的选择,例如每分钟,每5分钟,每半小时......,并将这些值转换为cron作业字符串。这是用户友好的,并禁止用户直接篡改cron作业字符串。
答案 1 :(得分:3)
您可以使用python调度程序库来完成大部分工作:
答案 2 :(得分:0)
Webmin怎么样?我自己从未使用它,但似乎你可以配置cron模块并为想要配置作业的用户授予权限。
答案 3 :(得分: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
[...]
答案 4 :(得分: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()
(我一直在谷歌搜索“cron”,找不到任何东西。我遗漏的关键词是“crontab”)。
我现在正在决定是否要使用它,或者只是将cron完全替换为基于python的调度程序。