Скрипт с 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