linux usb 升级脚本,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' <<
總結
以上是生活随笔為你收集整理的linux usb 升级脚本,linux – 使用bash脚本更新CRON的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言中OpenCV怎样实现柱面投影
- 下一篇: python中怎么实现对xlsx格式的表