如何阻止crontab搞乱这个简单的BASH脚本(为什么会发生这种情况)?

时间:2010-08-25 11:01:39

标签: bash cron crontab

我有一个奇怪的问题,涉及通过cron运行BASH脚本(通过crontab -e调用)。

这是脚本:

#!/bin/bash

SIG1="$(iwconfig wlan0 | awk '/Quality=/ { print $2} ' | cut -c 9-10)"
SIG2="$(iwconfig wlan0 | awk '/Quality=/ { print $2} ' | cut -c 12-13)"

echo "$SIG1:$SIG2" >> test.txt
exit

从命令行运行时,我得到45:70的预期输出回显到文本文件的末尾。但是,当我通过cron(使用crontab -e)和以下条目运行脚本时:

* * * * * bash /home/rupert/test.sh

我只是将冒号(:)回显到文本文件,未创建值SIG1和SIG2,我不知道为什么。为什么通过cron运行会弄乱脚本?

FWIW,这是iwconfig wlan0的输出,无需额外处理:

wlan0     IEEE 802.11abgn  ESSID:"plumternet"
          Mode:Managed  Frequency:2.452 GHz  Access Point: 00:18:84:2A:68:AD
          Bit Rate=54 Mb/s   Tx-Power=15 dBm
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality=46/70  Signal level=-64 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

我正在做这一切,因为我想在LCD屏幕上显示WiFi链接质量值“46/70”,我使用的程序通过读取文本文件来完成此操作。但是,当通过cron运行时,值会丢失...... ???

我正在使用cut -c 9-10和cut -c 12-13,因为我认为“/”可能会导致脚本出现问题,我很乐意使用cut -c 9-13 ,但我认为这可能会解决问题,但事实并非如此。

帮助!!

很酷,感谢你们,我意识到这是一个PATH问题,只需给iwconfig(/ sbin / iwconfig)完整路径修复它。这是LCD屏幕的图片,现在显示所有正确的信息:

http://img835.imageshack.us/img835/4175/20100825122413.jpg

3 个答案:

答案 0 :(得分:2)

您需要提供通过cron执行的任何命令的完整路径。 cron运行从任何终端分离的命令,这意味着您需要正确设置环境。 cut可能是可用的,但给出了iwconfig和awk的绝对路径

答案 1 :(得分:0)

将此文件的权限更改为777

chmod 777 /home/rupert/test.sh

也许这会有所帮助。

答案 2 :(得分:0)

我不知道防止这种情况(以干净的方式)发生的确切步骤(我不是所有Linux专家),但是,这看起来像是一个权限问题。运行cron作业的用户不允许执行您要执行的命令之一。

如果您修复了权限,我认为它可能运行得很好!