Сценарий оболочки запускается из командной строки, а не cron - PullRequest
3 голосов
/ 26 мая 2011

У меня есть скрипт, который обновляет сервер с помощью некоторой статистики один раз в день. Сценарий работает так, как задумано, при запуске из командной строки, но при запуске из cron некоторые переменные не передаются в curl.

Вот пример кода:

#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin
/bin/sh /etc/profile

MACADDR=$(ifconfig en0 | grep ether | awk '{print $2}')
DISKUSED=$(df / | awk '{print $3}' | tail -n1)
DISKSIZE=$(df / | awk '{print $2}' | tail -n1)

# HTTP GET PARAMS
GET_DELIM="&"
GET_MAC="macaddr"
GET_DS="disk_size"
GET_DU="disk_used"

# Put together the query
QUERY1=$GET_MAC=$MACADDR$GET_DELIM$GET_DS=$DISKSIZE$GET_DELIM$GET_DU=$DISK_USED

curl http://192.168.100.150/status.php?$QUERY1

Результат в задании cron: http://192.168.100.150/status.php?macaddr=&disk_size=&disk_used=

Я не уверен, что это какая-то проблема с переменными или, возможно, с awk, пытающимся проанализировать данные без указания размера терминала и т. Д.

Любая помощь приветствуется.

Ответы [ 3 ]

7 голосов
/ 26 мая 2011

Когда вы сталкиваетесь с подобными проблемами, это почти всегда проблема окружающей среды.

Дамп результатов "env" в файл и проверить это. Вы также можете запустить свой скрипт с верхней строкой

#!/bin/sh -x

чтобы увидеть, что происходит со всеми переменными. Возможно, вы захотите использовать скрипт-обертку, чтобы перенаправить вывод, предоставленный для анализа.

4 голосов
/ 26 мая 2011

Самая первая команда в вашем скрипте ifconfig найдена в /sbin/ifconfig на Mac. И переменная PATH по умолчанию для заданий cron установлена ​​на: /usr/bin:/bin По этой причине, вероятно, остальные ваши команды также терпят неудачу.

Лучше установить PATH вручную в верхней части вашего скрипта. Что-то вроде:

export PATH=$PATH:/sbin
2 голосов
/ 26 мая 2011

Одна проблема, с которой я столкнулся с кронами, состоит в том, что переменные, которые вы принимаете как должное, не существуют. Основным, что вы принимаете как должное, является переменная пути.

Вывод того, что вы указали в качестве пути при запуске из командной строки, и поместите его в верхнюю часть вашего скрипта (или в верхнюю часть crontab).

В качестве альтернативы укажите полный путь к каждой команде - ifconfig, awk, grep и т. Д.

Я думаю, это решит проблему.

...