linux usb 升级脚本,linux – 使用bash脚本更新CRON
誰(shuí)能在這里看到我的語(yǔ)法錯(cuò)誤?嘗試編輯/更新cron作業(yè),但文件未更新.
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(分鐘)中提取一個(gè)值來(lái)運(yùn)行該作業(yè).該腳本將首先檢查配置中的值是否與crontab中當(dāng)前的值不同.如果值不同,它將使用新值更新crontab. crontab(初始安裝和更新)還從變量中提取運(yùn)行目錄和腳本名稱(chēng).例:
DIR=`pwd`
SCRIPT=`basename $0`
CRONTMP=`crontab -l | grep anm.sh`
crontab -l | sed 's%'$CTMP'%*/'$FREQ' * * * * cd '$DIR' && ./'$SCRIPT'%' | crontab -
沿著那條線的東西.顯然這是缺少一些東西,但這應(yīng)該給你一般的想法.
謝謝您的幫助!
*更新*
好的,事情正在發(fā)生,但我仍然有一個(gè)小問(wèn)題.我想我已經(jīng)制定了大部分邏輯.這是腳本的完整(相關(guān))部分,因此您可以準(zhǔn)確地了解我要完成的任務(wù).
請(qǐng)記住:$SCRIPT和$DIR是在函數(shù)外定義的,只等于腳本名稱(chēng)(例如anm.sh)和當(dāng)前工作目錄.我接受了你的建議并更新了我的所有代碼.我現(xiàn)在使用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
}
本質(zhì)上,當(dāng)函數(shù)運(yùn)行時(shí),它首先檢查是否安裝了cron作業(yè)(這可能是腳本第一次運(yùn)行).如果它沒(méi)有檢測(cè)到任何內(nèi)容,它會(huì)將cron作業(yè)附加到crontab文件.到目前為止,這很有用.接下來(lái),如果函數(shù)確實(shí)檢測(cè)到已安裝了cron作業(yè),則會(huì)將其與配置文件中設(shè)置的頻率(以分鐘為單位)進(jìn)行比較.如果它們相同,則不對(duì)配置文件進(jìn)行任何修改,腳本繼續(xù)運(yùn)行.最后,如果值確實(shí)不同,則它會(huì)嘗試更新crontab文件中的相應(yīng)行以反映在配置文件中所做的更改.最后一部分失敗了.目前它只是將crontab文件完全覆蓋為空白.
*更新*
看起來(lái)以下行存在重大問(wèn)題.這不能正確地從crontab中拉出所需的行并將其存儲(chǔ)到變量CTMP中:
CTMP=$(crontab -l | grep $SCRIPT)
當(dāng)我回應(yīng)CTMP時(shí),我得到了一堆意想不到的結(jié)果.顯然我在這里使用grep不正確.
好的,這個(gè)問(wèn)題已經(jīng)解決.變量存儲(chǔ)正確,我只是錯(cuò)誤地回應(yīng)它.
*更新06/24/13 5:08 am *
最后一個(gè)問(wèn)題似乎是sed線.這是我正在研究的錯(cuò)誤消息.
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
看起來(lái)它正在嘗試更換線路,但失敗了.
*更新06/24/13 5:45 am *
所以上面的錯(cuò)誤信息是由我自己的愚蠢造成的.我把sed包括在引號(hào)內(nèi).我已經(jīng)從引號(hào)中刪除了命令,但問(wèn)題仍然存在.我試過(guò)單引號(hào),雙引號(hào),轉(zhuǎn)義*和.沒(méi)有運(yùn)氣. cron文件仍未更新.這是當(dāng)前的代碼:
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 *
也許問(wèn)題是我沒(méi)有逃避一切.也就是說(shuō),sed表達(dá)式中的變量一旦展開(kāi),就會(huì)有需要轉(zhuǎn)義的字符?這可能是問(wèn)題嗎?如果是這樣,我不確定如何解決這個(gè)問(wèn)題.請(qǐng)幫忙.
* 解決了 *
在將它們傳遞給sed之前,我確實(shí)必須逃避變量.這是代碼:
CTMPESC=$(sed 's/[\*\.&]/\\&/g' <<
總結(jié)
以上是生活随笔為你收集整理的linux usb 升级脚本,linux – 使用bash脚本更新CRON的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C语言中OpenCV怎样实现柱面投影
- 下一篇: Linux如何在栈上分配内存,Java堆