使用bash脚本安装crontab


11

我创建了一个脚本,将两个脚本安装到crontab上。

#!/bin/bash

 sudo crontab -l > mycron
 #echo new cron into cron file

 echo "*/05 * * * * bash /mnt/md0/capture/delete_old_pcap.sh" >> mycron #schedule the delete script
 echo "*/12 * * * * bash  /mnt/md0/capture/merge_pcap.sh" >> mycron     #schedule the merge script

#install new cron file
 crontab mycron
rm mycron

该脚本将运行,并将这两行添加到crontab中。但是,如果我再次运行该脚本,它将再次添加这些行,因此,我将有四行内容相同。我希望运行安装脚本,以使插入crontab的行不会重复。我怎样才能做到这一点


我不明白你的目标是什么?为什么首先要编写脚本?请在原始帖子中编辑并添加信息。tks
X Tian

Answers:


19

我建议使用/etc/cron.dover crontab

您可以放置/etc/cron.d行为类似于crontab条目的文件。虽然格式略有不同。

例如
/etc/cron.d/pcap

*/05 * * * * root bash /mnt/md0/capture/delete_old_pcap.sh
*/12 * * * * root bash  /mnt/md0/capture/merge_pcap.sh

格式上的差异是在时间指定之后添加用户来运行作业。

现在,您可以简单地检查文件是否存在,并且如果覆盖了文件,则无所谓。

 

请注意,您的cron守护程序可能没有/etc/cron.d。我不知道哪个cron守护程序具有它,但是vixie cron是Linux上的标准cron守护程序,并且确实如此。


3

您可以改为声明一个函数:

add() {
  grep -Fq "$1" mycron || echo "$1" >> mycron
}

并通过说出它来调用它:

add "*/05 * * * * bash /mnt/md0/capture/delete_old_pcap.sh"

仅当文件中不存在该行时,才添加行。


您能告诉我grep -Fq“ $ 1”是什么吗?
Jishnu U Nair 2014年

脚本给出错误grep:输入文件“ mycron”也是输出
Jishnu U Nair 2014年

@JishnuUNair -F会将grep模式解释为固定字符串。
devnull 2014年

@JishnuUNair您确定正确复制了上面的文本吗?
devnull 2014年

是的,我已正确复制了它。
Jishnu U Nair 2014年

1

从我使用的bash

    crontab -l | { cat; echo "*/10 * * * * /script/script.sh > /dev/null 2>&1"; } | crontab -

还使用此脚本在远程服务器上添加cron条目

    cronok="##";
    cronok+=`ssh $host 'crontab -l'`;
    pattern="reboot.sh"

    if [[ "$cronok" == *${pattern}* ]]; then
         echo "found cron  at [$host]"
      else
        echo "Cron at [$host] not found adding now"
       `ssh $host 'crontab -l | { cat; echo "*/10 * * * * /root/reboot.sh > /dev/null 2>&1"; } | crontab -'`
       echo "finished cron"
    fi

0

您可以编写脚本并将其添加到crontab中以停止它:

####You should calculate tiem you want kill your script.
#######code of calculating........
pid=`ps ax |egrep myscript |awk {'print $1'}`
kill -9 $pid
#OR
kill $pid

3
这不能回答问题。另外,kill -9只能作为不得已的方法-unix.stackexchange.com/questions/8916/…–
Graeme,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.