shell之外的地方執行指令碼遇到的問題

2021-08-26 00:03:30 字數 2151 閱讀 5676

這周裝伺服器,系統,應用都ok後,發現有的crontab指令碼中的命令無法執行,苦思了兩天,還是以下提供的建議解決了我的問題。

最近碰到乙個問題,shell指令碼直接執行和crontab設定好定時執行的結果不一樣,鬱悶.

指令碼是向遠端資料庫寫入記錄,直接執行可以在遠端寫入記錄,而在crontab中定時,指令碼是已經執行了,可是並沒有向遠端資料庫寫入記錄.

2008-1-17 11:25merlin852

貼你的指令碼看看

2008-1-17 11:30waker

環境不同

2008-1-17 11:41xmbbx

原帖由 merlin852 於 2008-1-17 11:25 發表 [url=

貼你的指令碼看看

/etc/crontab:

20 */1 * * * root /root/check.sh

/var/log/cron:

jan 17 08:20:00 ns000 crond[8594]: (root) cmd (/root/check.sh)

jan 17 09:20:00 ns000 crond[8621]: (root) cmd (/root/check.sh)

jan 17 10:20:00 ns000 crond[8648]: (root) cmd (/root/check.sh)

jan 17 11:20:00 ns000 crond[8675]: (root) cmd (/root/check.sh)

cat /root/check.sh:

#!/bin/bash

>/root/temp.txt

tcpdump -nnnv udp   >>/root/temp.txt &

time_for_check=`date "+%r" -d'1 minute'`

sleep 120

killall tcpdump

data=`grep "$time_for_check" /root/temp.txt|grep "53:"|wc -l`

getip=`ip a|grep eth0|awk 'end'|cut -d'/' -f1`

hostname=`hostname`

mysql -h 222.*.*.* -u user -p password databaes -e "insert into data values ('','$hostname','$getip','$data',now())"

[本帖最後由 xmbbx 於 2008-1-17 11:44 編輯 ]

2008-1-17 11:52galford433

mysql的環境加到cron裡面。或者用絕對路徑/usr/bin/mysql ?

tcpdump最好也用絕對路徑。

[本帖最後由 galford433 於 2008-1-17 11:54 編輯 ]

2008-1-17 12:40gucuiwen

[size=7]

一招必殺:

在指令碼最前面加上一句:

source ~/.bash_profile

這樣執行環境就一摸一樣了。加上這句後,直接執行能成功的指令碼放在crontab裡都能執行。

[/size]

2008-1-17 12:43gucuiwen

所有的crontab問題只有兩種可能,

1,環境

2,路徑

而第二種問題往往又是第一種問題引起的,所以加上環境後,.bash_profile裡的環境後99%的問題都一招通殺。

[size=5]

.bash_profile會讀取.bashrc

.bashrc 會讀取 /etc/bashrc

/etc/bashrc 會讀取 /etc/profile

[/size]

乙個linux所有的系統使用者,所有的環境變數,都逃不出以上幾個檔案。(前提是你用bash)

2008-1-17 13:24xmbbx

感謝樓上的各位,確實是環境(路徑)的問題,已經解決.

gucuiwen解釋的很清楚,非常感謝.

shell 執行指令碼

第一行,宣告直譯器 bin bash 符號能夠被核心識別成是乙個指令碼的開始,這一行必須位於指令碼的首行,bin bash是bash程式的絕對路徑,在這裡表示後續的內容將通過bash程式解釋執行。shell指令碼的執行 1 輸入指令碼的絕對路徑或相對路徑 root helloworld.sh hel...

shell 執行指令碼的幾種方式

最近在linux下使用shell的時候,碰到一些問題,最後將shell執行指令碼的方式總結如下 1 點號 指令碼的路徑 test.sh 當前使用者需要對 test.sh有執行許可權 即x許可權 指令碼執行環境在子shell中,子shell執行完指令碼後將結果返回。2 sh 空格 指令碼的路徑 或者 ...

Shell多執行緒執行指令碼示例

shell指令碼是順序執行的,但是系統允許多個shell指令碼同時執行,為了達到資源的綜合利用,也就是把伺服器往死裡用,有時候需要一段指令碼對多個指令碼進行多執行緒的排程,並且等待完成之後繼續執行後續的指令碼。主指令碼 bin bash 用於識別子執行緒的完成數量 rm test.count tou...