linux刷新脚本,linux – 使用bash脚本更新CRON

谁能在这里看到我的语法错误?尝试编辑/更新cron作业,但文件未更新.

crontab -l | sed 's%*/5 * * * * cd /home/administrator/anm-1.5.0 && ./anm.sh%*/10 * * * * cd /home/administrator/anm-1.5.0 && ./anm.sh%' | crontab -

*更新*

所以我仍然遇到麻烦.最终我试图从配置文件$FREQ(分钟)中提取一个值来运行该作业.该脚本将首先检查配置中的值是否与crontab中当前的值不同.如果值不同,它将使用新值更新crontab. crontab(初始安装和更新)还从变量中提取运行目录和脚本名称.例:

DIR=`pwd`

SCRIPT=`basename $0`

CRONTMP=`crontab -l | grep anm.sh`

crontab -l | sed 's%'$CTMP'%*/'$FREQ' * * * * cd '$DIR' && ./'$SCRIPT'%' | crontab -

沿着那条线的东西.显然这是缺少一些东西,但这应该给你一般的想法.

谢谢您的帮助!

*更新*

好的,事情正在发生,但我仍然有一个小问题.我想我已经制定了大部分逻辑.这是脚本的完整(相关)部分,因此您可以准确地了解我要完成的任务.

请记住:$SCRIPT和$DIR是在函数外定义的,只等于脚本名称(例如anm.sh)和当前工作目录.我接受了你的建议并更新了我的所有代码.我现在使用SCRIPT = $(basename $0).谢谢

function CRON {

if [ "`crontab -l | grep $SCRIPT`" \> " " ]; then

CTMP=$(crontab -l | grep $SCRIPT)

if [ "$CTMP" = "*/$FREQ * * * * cd $DIR && ./$SCRIPT" ]; then

echo "$GREEN No modifications detected $RESET"

else

crontab -l | "sed s%$CTMP%*/$FREQ * * * * cd $DIR && ./$SCRIPT%" | crontab -

fi

else

echo "$YELLOW CRON not detected - Installing defaults $RESET"

(crontab -l ; echo "*/$FREQ * * * * cd $DIR && ./$SCRIPT") | crontab -

fi

}

本质上,当函数运行时,它首先检查是否安装了cron作业(这可能是脚本第一次运行).如果它没有检测到任何内容,它会将cron作业附加到crontab文件.到目前为止,这很有用.接下来,如果函数确实检测到已安装了cron作业,则会将其与配置文件中设置的频率(以分钟为单位)进行比较.如果它们相同,则不对配置文件进行任何修改,脚本继续运行.最后,如果值确实不同,则它会尝试更新crontab文件中的相应行以反映在配置文件中所做的更改.最后一部分失败了.目前它只是将crontab文件完全覆盖为空白.

*更新*

看起来以下行存在重大问题.这不能正确地从crontab中拉出所需的行并将其存储到变量CTMP中:

CTMP=$(crontab -l | grep $SCRIPT)

当我回应CTMP时,我得到了一堆意想不到的结果.显然我在这里使用grep不正确.

好的,这个问题已经解决.变量存储正确,我只是错误地回应它.

*更新06/24/13 5:08 am *

最后一个问题似乎是sed线.这是我正在研究的错误消息.

sed s%*/12 * * * * cd /home/administrator/anm-1.5.0 && ./anm.sh%*/10 * * * * cd /home/administrator/anm-1.5.0 && ./anm.sh%: No such file or directory

看起来它正在尝试更换线路,但失败了.

*更新06/24/13 5:45 am *

所以上面的错误信息是由我自己的愚蠢造成的.我把sed包括在引号内.我已经从引号中删除了命令,但问题仍然存在.我试过单引号,双引号,转义*和.没有运气. cron文件仍未更新.这是当前的代码:

function CRON {

if [ "`crontab -l | grep $SCRIPT`" \> " " ]; then

CTMP="$(set -f; crontab -l | grep $SCRIPT)"

if [ "$CTMP" = "*/$FREQ * * * * cd $DIR && ./$SCRIPT" ]; then

echo "$GREEN No modifications detected $RESET"

else

crontab -l | sed "s%$CTMP%*/$FREQ * * * * cd $DIR && ./$SCRIPT%" | crontab -

fi

else

echo "$YELLOW CRON not detected - Installing defaults $RESET"

(crontab -l ; echo "*/$FREQ * * * * cd $DIR && ./$SCRIPT") | crontab -

fi

}

*更新06/24/13 6:05 am *

也许问题是我没有逃避一切.也就是说,sed表达式中的变量一旦展开,就会有需要转义的字符?这可能是问题吗?如果是这样,我不确定如何解决这个问题.请帮忙.

* 解决了 *

在将它们传递给sed之前,我确实必须逃避变量.这是代码:

CTMPESC=$(sed 's/[\*\.&]/\\&/g' <<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值