Script с lsof хорошо работает на оболочке не на cron

У меня есть небольшой script do открыть открытые файлы в Linux, сохранить результаты в плоский файл. Я собираюсь запустить его на Крон каждую минуту, чтобы собирать результаты позже. script следует:

/bin/echo "Timestamp: ` date +"%m-%d-%y %T"` Files: `lsof | grep app | wc -l`"

И crontab:

*/1 * * * * /usr/local/monitor/appmon.sh >> /usr/local/monitor/app_stat.txt

Если я запускаю из shell./ script.sh, он работает хорошо и выводит как:

Timestamp: 01-31-13 09:33:59 Files: 57

Но на выходе Cron:

Timestamp: 01-31-13 09:33:59 Files: 0

Не уверен, нужны ли какие-либо разрешения или что-то подобное. Я тоже пробовал с sudo на lsof.

Любые подсказки?

Ответ 1

из вашей рабочей cmd-линии, do

which lsof
which grep
which wc
which date

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

/bin/echo "Timestamp: `/bin/date +"%m-%d-%y %T"` Files: `/usr/sbin/lsof | /bin/grep app | /bin/wc -l`"

ИЛИ вы можете установить PATH var для включения отсутствующих значений в script, т.е.

 PATH=/usr/sbin:${PATH}

Кроме того, если вы не ожидаете, что ваш script будет запущен из настоящей среды Bourne Shell, присоединитесь к началу 90-х и используйте форму $( cmd ... ) для замены cmd, а не backticks. Книга Ksh 93, опубликованная в 1995 году, отмечает, что обратные шаги для замены команд устарели, -)

IHTH