每个shell脚本创建和删除

时间:2015-04-18 14:28:11

标签: linux bash shell

以下是场景:

我有一个Java小程序,它显示了在我的服务器上运行的Cronjobs。现在我想从applet中创建和删除Cronjobs。 applet和服务器之间的通信不是问题,但我不太确定如何为每个脚本创建Cronjobs,以便我可以在需要时轻松删除它们。

在我看来,每个cronjob都有一个自己的目录,这样如果我愿意,我可以逐个删除。

我很感谢每一个建议

2 个答案:

答案 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文件。