Bash脚本 - Crontab完成部分bash脚本但不是全部

时间:2017-02-26 14:01:10

标签: linux bash shell cron

以下bash脚本在L1上每10分钟运行一次,在脚本中用于生成随机密码,然后将其打印到文件中,然后将其复制到L2。

#!/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" pi@192.168.1.1:~/.ssh/
        sudo service networking restart

Unfornaltey L1似乎没有收到新密码,但L2确实如此。

L1输出

pi@raspberrypi:/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输出

pi@raspberrypi:~/.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

任何建议?

谢谢

3 个答案:

答案 0 :(得分:0)

假设您以非root用户身份运行脚本,重定向不适用于sudo,请尝试以下

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

同样用于双重定向。

将脚本的输出和错误重定向到日志文件,以便您知道出了什么问题。为此,请执行以下更改:

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

您可以在调试模式下进一步运行脚本,以逐步调试脚本。

如果您反复搜索同一个文件,我建议您检查远程计算机上文件的修改时间,以确认该文件是否已收到更新。

答案 1 :(得分: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" pi@192.168.1.1:~/.ssh/
    sudo service networking restart

答案 2 :(得分:0)

考虑到您的文件被复制到目的地,它意味着在源上创建。毫无疑问。 似乎" $ targetfile"是在您不希望它进入的目录中创建的。如果未指定目标的完整路径,则会出现典型问题。 您的脚本位于" / etc / greenwich /"但是当cron启动它时,脚本运行的当前目录是用户主目录(在大多数情况下)和" $ targetfile"在当前目录中创建。

请定义" $ targetfile"完整路径,指向要在其中创建文件的位置。