以下是场景:
我有一个Java小程序,它显示了在我的服务器上运行的Cronjobs。现在我想从applet中创建和删除Cronjobs。 applet和服务器之间的通信不是问题,但我不太确定如何为每个脚本创建Cronjobs,以便我可以在需要时轻松删除它们。
在我看来,每个cronjob都有一个自己的目录,这样如果我愿意,我可以逐个删除。
我很感谢每一个建议
答案 0 :(得分:0)
我的建议:
查看linux机器上的目录/etc/cron.d
。在那里,您可能会发现现有的cron作业可以作为您的任务的模板。
下一个问题是您的applet是否有权在/etc/cron.d
中创建,修改和删除文件。由于我不了解你的具体情况,我不能说......
答案 1 :(得分:0)
你想要一个在没有你做某事的情况下调用crontab -e的脚本。 如果您拥有crontab的完整副本,请先删除旧的cron。
$ crontab -r
$ export TERM=vt100; crontab -e >/dev/null 2>&1 <<@
:r /full/path/to/your/cronfile
:wq
@
$ crontab -l
从命令行尝试此操作。当editCron.sh脚本工作时,请调用它。
编辑:上面替换完整的crontab,假设您确切知道您想要的版本。 如果要删除/添加一行,则应创建一个编辑新cronfile的脚本。当您尝试删除要添加的行时,这是最容易的, 所以你不必考虑这条线是否已经存在 当您知道crontab行中的唯一子字符串时,请为每个crontab行创建2个文件:
$ cat example.key
example.sh
$ cat example.cron
10 * * * * /var/local/bin/example.sh >/dev/null 2>@1
您可以制作和使用这样的addcronline.sh脚本(未经测试):
$ cat addcronline.sh
if [ $# -ne 1 ]; then
echo Usage: $0 key
echo key: basename of a file in cronlines
exit 1
fi
myCrons=/path/to/your/cronsnippets
keyFromApplet=$1
keyInCronline=$(cat ${myCrons}/${keyFromApplet}.key)
newCron=/full/path/to/your/cronfile
# Get current crontab and delete line when it's part of it
# In sed do not use / but #, since / can easily be port of your key
crontab -l | sed 's#'"${keyInCronline}"'##' > ${newCron}
cat ${myCrons}/${keyFromApplet}.cron >> ${newCron}
echo "Continue as the first code example (starting with crontab -r)"
$ chmod +x addcronline.sh
$ ./addcronline.sh example
当你有简单的键时,你可以简化上面的脚本。您可以将参数$ 1直接用作keyInCronline
,然后删除example.key文件。