我有一个奇怪的问题,与通过cron (通过crontab -e调用)运行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没有创建,我不知道为什么。为什么通过cron运行会弄乱脚本?
这里是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链接质量值"46/70“,而我使用的程序通过读取文本文件来实现这一点。但是,当通过cron运行时,值会丢失...?
我使用cut -c 9-10和cut -c 12-13,因为我认为"/“可能会在脚本中引起问题,我很乐意只使用cut -c 9-13,但我认为它可能会解决问题,但它没有。
救命!!
酷,感谢你们,我意识到这是一个路径问题,简单地给出iwconfig (/sbin/iwconfig)的完整路径就解决了这个问题。以下是显示所有正确信息的LCD屏幕的图片:
http://img835.imageshack.us/img835/4175/20100825122413.jpg
发布于 2010-08-25 19:09:07
您需要提供通过cron执行的任何命令的完整路径。cron运行从任何终端分离的命令,这意味着您需要正确设置环境。cut可能是可用的,但给出了iwconfig和awk的绝对路径
发布于 2010-08-25 19:09:02
将此文件的权限更改为777
chmod 777 /home/rupert/test.sh也许这会有帮助。
发布于 2010-08-25 19:09:22
我不知道(以一种干净的方式)防止这种情况发生的确切步骤(我并不完全是linux专家),但是,对我来说,这看起来像是权限问题。不允许运行cron作业的用户执行您要执行的命令之一。
如果你修复了权限,我想它可能会运行得很好!
https://stackoverflow.com/questions/3565164
复制相似问题