Скрипт с lsof хорошо работает на shell не на cron

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

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

и кронтаб это:

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

если я бегу от оболочки ./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-line, do

which lsof
which grep
which wc
which date

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

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

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

 PATH=/usr/sbin:${PATH}

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

IHTH