2017-02-26 77 views
1

下面的bash腳本在L1上每10分鐘運行一次,腳本內部是爲了生成一個隨機密碼,然後將其打印到文件中,然後將其複製到L2。Bash腳本 - Crontab完成bash腳本的一部分但不是全部

#!/bin/bash 
targetFile="testfilegen2.log" 
address="192.168.1.1" 
netmask="255.255.255.0" 
channel="1" 
essid="GreRPi" 
random=$(pwgen 13 -1) 
     sudo echo "source-directory /etc/network/interfaces.d" > "$targetFile" 
     sudo echo "auto lo" >> "$targetFile" 
     sudo echo "auto wlan0" >> "$targetFile" 
     sudo echo "allow-hotplug wlan0" >> "$targetFile" 
     sudo echo "iface wlan0 inet static" >> "$targetFile" 
     sudo echo "address $address" >> "$targetFile" 
     sudo echo "netmask $netmask" >> "$targetFile" 
     sudo echo "wireless-channel $channel" >> "$targetFile" 
     sudo echo "wireless-essid $essid" >> "$targetFile" 
     sudo echo "wireless-mode ad-hoc" >> "$targetFile" 
     sudo echo "wireless-key s:$random" >> "$targetFile" 
     sleep 1 
     scp "$targetFile" [email protected]:~/.ssh/ 
     sudo service networking restart 

Unfornaltey L1似乎並沒有收到新的密碼,但L2一樣。

L1輸出

[email protected]:/etc/greenwich $ cat testfilegen2.log 
source-directory /etc/network/interfaces.d 
auto lo 
auto wlan0 
allow-hotplug wlan0 
iface wlan0 inet static 
address 192.168.1.1 
netmask 255.255.255.0 
wireless-channel 1 
wireless-essid GreRPi 
wireless-mode ad-hoc 
wireless-key s:she5Bie1ojoon 

L2輸出

[email protected]:~/.ssh $ cat testfilegen2.log 
source-directory /etc/network/interfaces.d 
auto lo 
auto wlan0 
allow-hotplug wlan0 
iface wlan0 inet static 
address 192.168.1.1 
netmask 255.255.255.0 
wireless-channel 1 
wireless-essid GreRPi 
wireless-mode ad-hoc 
wireless-key s:ez2eeCeich0oc 

任何建議?

謝謝

+0

你檢查腳本的日誌,它說:「訪問被拒絕」? –

回答

0

假設你正在運行的腳本非root用戶,重定向無法使用sudo工作,這樣反而嘗試以下

sudo sh -c "echo source-directory /etc/network/interfaces.d > $targetFile" 

27:11雙重定向。

將腳本的輸出和錯誤重定向到日誌文件,以便您知道發生了什麼問題。要做到這一點,請執行以下更改:

#!/bin/bash 
    { 
    ... 
    your script here 
    ... 
    } 2>&1 > /tmp/myScript.log 

您可以在調試模式下進一步運行腳本,以逐步調試您的腳本。

如果你一次又一次地SCP同一個文件,我建議你檢查遠程機器上文件的修改時間,以確認文件是否已經收到更新。

+0

謝謝,但不幸的是它仍然在做同樣的工作 – spbr

+0

它說的錯誤是什麼? –

+0

它沒有出現錯誤,它只是不更新​​L1上的testfilegen2.log,但只更新L2上的testfilegen2.log。我對這個有點困惑。 – spbr

0

正如Vikas Tiwari指出的,重定向發生在當前用戶之前sudo運行。您需要使用sudo打開文件。這可以通過tee程序完成,您只需要運行一次

targetFile="testfilegen2.log" 
address="192.168.1.1" 
netmask="255.255.255.0" 
channel="1" 
essid="GreRPi" 
random=$(pwgen 13 -1) 
{ 
    echo "source-directory /etc/network/interfaces.d" 
    echo "auto lo" 
    echo "auto wlan0" 
    echo "allow-hotplug wlan0" 
    echo "iface wlan0 inet static" 
    echo "address $address" 
    echo "netmask $netmask" 
    echo "wireless-channel $channel" 
    echo "wireless-essid $essid" 
    echo "wireless-mode ad-hoc" 
    echo "wireless-key s:$random" 
} | sudo tee "$targetFile" > /dev/null 
    sleep 1 
    scp "$targetFile" [email protected]:~/.ssh/ 
    sudo service networking restart 
+0

謝謝,但不幸的是它仍然在做同樣的事情。 – spbr

0

考慮到您的文件被複制到目標上,這意味着它將在源上創建。毫無疑問,這裏。 似乎「$ targetfile」是在您不希望它所在的目錄中創建的。如果未指定目標的完整路徑,則會出現典型問題。 您的腳本位於「/ etc/greenwich /」中,但是當cron啓動它時,腳本運行的當前目錄是用戶主目錄(在大多數情況下),並且在當前目錄中創建「$ targetfile」 。

請定義「$的TargetFile」與完整路徑要在其中創建的文件。