创建和删除每个外壳脚本



下面是场景:

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

在我看来,我为每个 cronjob 都有一个自己的目录,以便我可以根据需要逐个删除。

我感谢每一个建议

你想要一个调用 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 文件。

我的建议:

查看 linux 计算机上的目录/etc/cron.d。在那里,您可能会找到可以用作任务模板的现有 cron 作业。

下一个问题是您的小程序是否有权在 /etc/cron.d 中创建、修改和删除文件。由于我不知道有关您情况的更多详细信息,因此我无法说...

最新更新