2013-06-06 11 views
0

Редактировать: Решение найдено через ответ Бармара. Добавлен полный путь команды smartctl, и теперь он работает через crontab.Cronjob отсутствует содержимое почтового отправления, вручную работает нормально

У меня есть ниже сценарий:

#!/bin/bash 
#set -x 
EMAIL="[email protected]" 
FILE="/root/scripts/hddreport.txt" 
HOST=`hostname` 
HDD01="/dev/sda" 
P=`ping -c 1 $HOST | sed '1 ! d' | awk '{print $3}'` 

cd /root/scripts/ 
echo -en "HDD health check on the server hosting" $HOST $P > $FILE 
echo -e "\n" >> $FILE 
smartctl -H $HDD01 >> $FILE 
# The above commands do correctly write the content to $FILE (proved by removing the rm command at the bottom and doing cat on the file after) 

smartctl -H $HDD01 

echo "\nEmailed you the health of the Hard Drive $HDD01\n" 
mailx -s "HDD health check complete on `date`" $EMAIL < $FILE 
rm $FILE 

, который прекрасно работает, делая Баш /root/scripts/diskhealth.sh, как это показывает, что это в моем почтовом ящике:

HDD health check on the server hosting domain.co.uk (0.0.0.0) 

smartctl 5.40 2010-07-12 r3124 [x86_64-unknown-linux-gnu] (local build) 
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net 

SMART Health Status: OK 

Но когда я позволяю запустить его с помощью кронтаба с использованием любого из следующего синтаксиса:

X 20 * * * /bin/bash /root/scripts/diskhealth.sh 
X 20 * * * /bin/sh /root/scripts/diskhealth.sh 
X 20 * * * /root/scripts/diskhealth.sh 

он ставит все, кроме smartctl проверки диска:

HDD health check on the server hosting domain.co.uk (0.0.0.0) 

Вот что это показывает, если добавить дополнительные эхо-линии:

This is a test 
HDD health check on the server hosting domain.co.uk (0.0.0.0) 

исправленный скрипт для "Это тест" ниже:

#!/bin/bash 
#set -x 
EMAIL="[email protected]" 
FILE="/root/scripts/hddreport.txt" 
HOST=`hostname` 
HDD01="/dev/sda" 
P=`ping -c 1 $HOST | sed '1 ! d' | awk '{print $3}'` 

cd /root/scripts/ 
echo "This is a test" > $FILE 
echo -en "HDD health check on the server hosting" $HOST $P >> $FILE 
echo -e "\n" >> $FILE 
smartctl -H $HDD01 >> $FILE 

smartctl -H $HDD01 

echo "\nEmailed you the health of the Hard Drive $HDD01\n" 
mailx -s "HDD health check complete on `date`" $EMAIL < $FILE 
rm $FILE 

Вот/вар/журнал/syslog от cron:

Jun 6 20:25:01 hostname /USR/SBIN/CRON[1018112]: (root) CMD (bash /root/scripts/diskhealth.sh) 
Jun 6 20:25:01 hostname postfix/pickup[1016576]: 5740356613F: uid=0 from=<root> 
Jun 6 20:25:01 hostname postfix/cleanup[1018125]: 5740356613F: message-id=<[email protected]> 
Jun 6 20:25:01 hostname postfix/qmgr[292015]: 5740356613F: from=<[email protected]>, size=465, nrcpt=1 (queue active) 
Jun 6 20:25:01 hostname postfix/pickup[1016576]: 631F156613E: uid=0 from=<root> 
Jun 6 20:25:01 hostname postfix/cleanup[1018125]: 631F156613E: message-id=<[email protected]> 
Jun 6 20:25:01 hostname postfix/qmgr[292015]: 631F156613E: from=<[email protected]>, size=759, nrcpt=1 (queue active) 
Jun 6 20:25:01 hostname pvemailforward[1018132]: forward mail to <[email protected]> 
Jun 6 20:25:01 hostname postfix/pickup[1016576]: B597B566148: uid=65534 from=<nobody> 
Jun 6 20:25:01 hostname postfix/cleanup[1018125]: B597B566148: message-id=<[email protected]> 
Jun 6 20:25:01 hostname postfix/local[1018131]: 631F156613E: to=<[email protected]>, orig_to=<root>, relay=local, delay=0.39, delays=0.16/0/0/0.23, dsn=2.0.0, status=sent (delivered to command: /usr/bin/pvemailforward) 
Jun 6 20:25:01 hostname postfix/qmgr[292015]: 631F156613E: removed 
Jun 6 20:25:01 hostname postfix/qmgr[292015]: B597B566148: from=<[email protected]>, size=963, nrcpt=1 (queue active) 
Jun 6 20:25:01 hostname postfix/smtp[1018135]: B597B566148: to=<[email protected]>, relay=none, delay=0.16, delays=0.12/0/0.04/0, dsn=5.4.4, status=bounced (Host or domain name not found. Name service error for name=localhost.localdomain type=A: Host not found) 
Jun 6 20:25:01 hostname postfix/qmgr[292015]: B597B566148: removed 
Jun 6 20:25:01 hostname postfix/cleanup[1018125]: D6570566147: message-id=<[email protected]> 
Jun 6 20:25:01 hostname postfix/smtp[1018130]: 5740356613F: to=<[email protected]>, relay=ASPMX.L.GOOGLE.COM[173.194.67.27]:25, delay=0.68, delays=0.12/0/0.19/0.36, dsn=2.0.0, status=sent (250 2.0.0 OK 1370546701 iy4si8635735wic.1 - gsmtp) 
Jun 6 20:25:01 ds9453 postfix/qmgr[292015]: 5740356613F: removed 

Получено электронное письмо, просто отсутствует выход smartctl.

+0

Покажите свою линию crontab, чтобы увидеть, что может случиться. – fedorqui

+0

Моя линия crontab - это всего лишь 30 20 * * *, затем либо одна из строк, где я упомянул синтаксис (например, так будет работать в 8:30 сегодня). Я отредактировал свой вопрос, чтобы показать, что показывает/var/log/syslog. – Zippyduda

+0

Важно, чтобы ваш синтаксис был похож на '* * * * */bin/sh/path/to/script.sh', то есть убедитесь, что у вас есть'/bin/sh' или его эквивалент. – fedorqui

ответ

2

Работы Cron не запускают ваш .profile. Поэтому, если smartctl находится в каталоге, который вы добавляете в свой профиль $PATH, он не будет найден при запуске через cron. Попробуйте использовать полный путь к команде.

+0

Я вхожу в систему как пользователь root, и все это в файле /root/.profile, если ["$ BASH"], тогда если [-f ~/.bashrc], то. ~/.bashrc fi fi mesg n и в .bashrc - это всего лишь материал цвета. – Zippyduda

+0

Фантастический, работает сейчас haha. Я поместил/usr/sbin/smartctl перед командами в скрипте, и теперь он работает. Спасибо Barmar! :) – Zippyduda

+0

Проверьте также на '/ root/.bash_profile'. Один из сценариев запуска должен добавлять '/ usr/sbin' к корневому пути. – Barmar

 Смежные вопросы

  • Нет связанных вопросов^_^