Error[8]: Undefined offset: 9, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述谁能在这里看到我的语法错误?尝试编辑/更新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 - *更新* 所以我仍然遇到麻烦. 谁能在这里看到我的语法错误?尝试编辑/更新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 
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}
`CRONTMP=`crontab -l | grep anm.sh`crontab -l | sed 's%'$CTMP'%*/'$FREQ' * * * * cd '$DIR' && ./'$SCRIPT'%' | crontab -

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

谢谢您的帮助!

*更新*

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

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

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

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

*更新*

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

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

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

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

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

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

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 5:45 am *

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

CTMPESC=$(sed 's/[\*\.&]/\&/g' <<<"$CTMP")DIRESC=$(sed 's/[\*\.&]/\&/g' <<<"$DIR")SCRIPTESC=$(sed 's/[\*\.&]/\&/g' <<<"$SCRIPT")crontab -l | sed "s%$CTMPESC%\*/$FREQ \* \* \* \* cd $DIRESC \&\& \./$SCRIPTESC%" | crontab -

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

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

* 解决了 *

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

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 -
解决方法 尝试逃避*和.在你的替换部分.

crontab -l | sed '/anm\.sh/s,^\*/5,*/10,' | crontab -

或者,您可以输入与您的工作相匹配的正则表达式,只需更改时间即可

[+++] 总结

以上是内存溢出为你收集整理的linux – 使用bash脚本更新CRON全部内容,希望文章能够帮你解决linux – 使用bash脚本更新CRON所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
linux – 使用bash脚本更新CRON_系统运维_内存溢出

linux – 使用bash脚本更新CRON

linux – 使用bash脚本更新CRON,第1张

概述谁能在这里看到我的语法错误?尝试编辑/更新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 - *更新* 所以我仍然遇到麻烦. 谁能在这里看到我的语法错误?尝试编辑/更新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 
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}
`CRONTMP=`crontab -l | grep anm.sh`crontab -l | sed 's%'$CTMP'%*/'$FREQ' * * * * cd '$DIR' && ./'$SCRIPT'%' | crontab -

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

谢谢您的帮助!

*更新*

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

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

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

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

*更新*

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

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

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

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

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

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

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 5:45 am *

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

CTMPESC=$(sed 's/[\*\.&]/\&/g' <<<"$CTMP")DIRESC=$(sed 's/[\*\.&]/\&/g' <<<"$DIR")SCRIPTESC=$(sed 's/[\*\.&]/\&/g' <<<"$SCRIPT")crontab -l | sed "s%$CTMPESC%\*/$FREQ \* \* \* \* cd $DIRESC \&\& \./$SCRIPTESC%" | crontab -

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

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

* 解决了 *

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

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 -
解决方法 尝试逃避*和.在你的替换部分.

crontab -l | sed '/anm\.sh/s,^\*/5,*/10,' | crontab -

或者,您可以输入与您的工作相匹配的正则表达式,只需更改时间即可

总结

以上是内存溢出为你收集整理的linux – 使用bash脚本更新CRON全部内容,希望文章能够帮你解决linux – 使用bash脚本更新CRON所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1030761.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存