2010-08-25 28 views
0

我有一个奇怪的问题,涉及通过cron运行BASH脚本(通过crontab -e调用)。如何阻止crontab搞乱这个简单的BASH脚本(以及为什么发生这种情况)?

下面是脚本:

#!/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 AREN” t创建,我不知道为什么。为什么要通过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 

我做的这一切,因为我想显示的WiFi链接质量值“七十零分之四十六”在LCD屏幕上,并我使用的程序通过读取文本文件来完成。但是,当通过cron运行时,值会丢失...?

我使用切-C 9-10切-c 12-13,因为我在想“/”可能会在脚本中引起的问题,我很乐意只使用切割-c 9- 13,但我认为它可以解决这个问题,但事实并非如此。

帮助!!

酷,感谢你们,我意识到这是一个路径问题,简单给出的完整路径iwconfig的(/ sbin目录/ iwconfig的)固定它。这里是液晶屏现在显示所有正确的信息的PIC:

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

+0

这是一个很好的做法,用'-e'开关启动bash脚本,或者将它放在shebang行上。通过这种方式,它会在第一个失败的命令上中止脚本,为您提供失败的命令行编号,并可能有助于避免因先前失败的命令而导致数据损坏。 – 2010-08-25 11:53:38

回答

2

您需要给出通过cron执行的任何命令的完整路径。 cron运行与任何终端分离的命令,这意味着您需要正确设置环境。切可能是可用的,但给iwconfig的

+0

这是很好的做法,没有必要,对吗? – Jasper 2010-08-25 11:23:44

+0

你是对的,它需要iwconfig的完整路径,我从来不知道!干杯 – prupert 2010-08-25 11:36:40

+0

很高兴有帮助,是的,你给绝对路径通过cron执行的所有命令(或任何shell脚本中的最佳做法) – ennuikiller 2010-08-25 11:58:04

0

更改该文件的权限为777

chmod 777 /home/rupert/test.sh 

也许这会有所帮助。

+0

在我看来,测试具有不正确的权限(它正在运行...),但权限问题与iwconfig有关。 – Jasper 2010-08-25 11:12:01

+0

是的,我认为对.sh文件的权限是正常的,因为它运行(使用chmod a + x),但正如Jasper所说,这可能与iwconfig有关。 – prupert 2010-08-25 11:21:13

+0

您应该几乎不会更改*任何*文件到777. – 2010-08-25 13:45:31

0

我不知道确切的措施,以避免(在干净的方式)的发生的绝对路径和awk(我不是所有的一个Linux专家)然而,这看起来像一个权限问题给我。作为cron作业运行的用户不允许执行您允许执行的命令之一。

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

+0

不是权限问题,原来这是一个PATH问题;) – prupert 2010-08-25 11:37:05

+0

这是另一个在cron vs CLI中可能出现的问题(声明:我知道),我只是认为这不是问题。 – Jasper 2010-08-25 11:45:49

相关问题