2
我bash腳本的Cron無法運行bash腳本
#!/bin/sh
DTFILE=/etc/daytime.addr
DTPORT=13
DAYTIME_ERROR=/tmp/dtm.err
function daytime_error(){
if [[ -z $1 ]]
then
exit 1
fi
if [[ -e $DAYTIME_ERROR ]]
then
echo "Error already reported"
else
logger "$1"
touch $DAYTIME_ERROR
fi
exit 1
}
if [[ -s $DTFILE ]]
then
ADDR=$(head -n1 $DTFILE)
DAYTIME=$(telnet $ADDR $DTPORT | time_conv.awk)
if [[ -z $DAYTIME ]]
then
daytime_error "Daytime client: no connection to $ADDR"
else
date -s "$DAYTIME"
hwclock -w
rm $DAYTIME_ERROR
fi
else
daytime_error "Daytime client: no daytime server address in file $DTFILE"
fi
和它的作品從命令行調用時,但當cron的調用失敗。具體來說,使用telnet命令的行提供零字節的輸出。 Telnet有755個掩碼,所以每個用戶都應該可以使用它。有任何想法嗎 ?
更新time_conv.awk的,內容:
#! /usr/bin/awk -f
/[0-9]+:[0-9]+:[0-9]+/ {
if ($2~/Jan/) $2=1;
else if ($2~/Feb/) $2=2;
else if ($2~/Mar/) $2=3;
else if ($2~/Apr/) $2=4;
else if ($2~/May/) $2=5;
else if ($2~/Jun/) $2=6;
else if ($2~/Jul/) $2=7;
else if ($2~/Aug/) $2=8;
else if ($2~/Sep/) $2=9;
else if ($2~/Oct/) $2=10;
else if ($2~/Nov/) $2=11;
else if ($2~/Dec/) $2=12;
print $5 "-" $2 "-" $3 " " $4
}
你如何運行它?是'bash
你應該提到你得到的具體錯誤信息。無論如何,既然你說telnet行導致錯誤,我假設以下常見的陷阱:
/bin/bash
。看看/bin/sh
指向什麼,例如與ls -l /bin/sh
/bin/bash
作爲默認的shell(也許這是在/etc/passwd
爲您的帳戶或由可變$SHELL
手段解決方案:
SHELL=/bin/bash
#!/bin/bash
(我的建議)來源
2011-06-05 19:19:12 xebeche
好。狂猜的時間...
你使用的是
.rhosts
文件嗎?這樣,當你telnet時,你不必輸入密碼。你不能在crontab腳本中做到這一點。如果是這樣的原因,你必須做三兩件事:
ssh-keygen
程序,並生成公鑰和私鑰。爲遠程機器做同樣的事情。現在,在遠程機器上創建authorized_hosts文件並添加公鑰。來源
2011-06-05 20:40:11