Как я могу помешать crontab испортить этот простой скрипт BASH (и почему это происходит)? - PullRequest
0 голосов
/ 25 августа 2010

У меня странная проблема, связанная с запуском скрипта BASH через cron (вызывается через 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

Я делаю все это, потому что я хочу отобразить значение качества Wi-Fi Link "46/70" на ЖК-экране, и программа, которую я использую, делает это, читая текстовый файл. Однако при запуске через cron значения теряются ... ???

Я использую cut -c 9-10 и cut -c 12-13, потому что я думал, что "/" может вызвать проблему в скрипте, я был бы рад просто использовать cut -c 9-13 , но я думал, что это может решить проблему, но это не так.

Помощь !!

Круто, спасибо вам, ребята, я понял, что это проблема PATH, просто указав полный путь к iwconfig (/ sbin / iwconfig), исправил ее. Вот изображение ЖК-экрана, показывающего всю правильную информацию:

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

Ответы [ 3 ]

2 голосов
/ 25 августа 2010

вам нужно указать полный путь к любым командам, выполняемым через cron.cron запускает команды, отсоединенные от любого терминала, что означает, что вам нужно правильно настроить среду.Возможно, cut доступен, но дает абсолютный путь к iwconfig и awk

0 голосов
/ 25 августа 2010

Я не знаю точных шагов, чтобы не допустить этого (в чистом виде) (я не совсем специалист по linux), однако для меня это похоже на проблему с разрешениями.Пользователь, от имени которого выполняются задания cron, не может выполнять одну из команд, которые вы разрешаете выполнять.

Если вы исправите разрешения, я думаю, что это может работать просто отлично!

0 голосов
/ 25 августа 2010

Измените разрешение этого файла на 777

chmod 777 /home/rupert/test.sh

Может быть, это поможет.

...