2017-02-26 76 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”与完整路径要在其中创建的文件。