Нет вывода mdadm -D в crontab
У меня есть следующий скрипт:
#!/bin/bash
# wait, just in case hdd md0 in not mountet yet
sleep 30
# write Raid state in log-file
mdadm -D /dev/md0 > /home/main_usr/myScripts/raidHealth.log
#just check if it writes to the file
echo "just a Test" >> /home/main_usr/myScripts/raidHealth.log
Я сделал следующие вещи: 1. сделал исполняемый файл 2. изменил владельца на root 3. написал скрипт в crontab (sudo crontab -e | @reboot /home/main_usr/myScripts/checkRaid.sh)
Вот моя проблема: когда я запускаю скрипт, все работает просто отлично. Но когда я перезагружаю мой компьютер, скрипт запускается, а мой файл.log просто содержит "просто тест". Нет вывода команды mdadm. Я не могу объяснить, почему команда mdadm пуста в этом случае. Может быть, кто-то может мне помочь.
Я также должен упомянуть, что мне нужен sudo для запуска скрипта (mdadm-command)
3 ответа
В вашем скрипте вам просто нужно добавить полный путь mdadm, который /sbin/mdadm
по умолчанию
Ваш сценарий будет выглядеть так:
#!/bin/bash
# wait, just in case hdd md0 in not mountet yet
sleep 30
# write Raid state in log-file
#-------------------just change this area-------------------------
/sbin/mdadm -D /dev/md0 > /home/main_usr/myScripts/raidHealth.log
#-----------------------------------------------------------------
#just check if it writes to the file
echo "just a Test" >> /home/main_usr/myScripts/raidHealth.log
и нет необходимости менять местоположение файла скрипта, также используя "crontab -e", просто введите crontab -e
и вставьте следующее
@reboot /home/main_usr/myScripts/checkRaid.sh
Я думаю, что mdadm
Файл программы не найден по пути crond.
Объединение того, что другие уже предложили, и добавление мучительных деталей:
- обеспечивать
mdadm
находится на пути - проверить и войти
$?
отmdadm
- бежать
mdadm
пространно - время
mdadm
вызов - проверять
/var/log/*
,$ man cron
,$ man crontab
, man7.org и т. д.
так что-то вроде:
#!/bin/bash
logfile="/home/main_usr/myScripts/raidHealth.$$.log"
touch $logfile || (echo "could not touch ${logfile}" && exit 1)
echo "$(date) - BEGIN sleep" >> ${logfile}
# wait, just in case hdd md0 in not mountet yet
sleep 30
echo "$(date) - END sleep." >> ${logfile}
which mdadm > /dev/null
rc=$?
if [ $rc -ne 0 ]
then
echo "$(date) - FAIL - could not find cmd" >> ${logfile}
exit $c
fi
echo "$(date) - BEGIN mdadm - will run $(which mdadm)" >> ${logfile}
# write Raid state in log-file
mdadm --verbose -D /dev/md0 > ${logfile} 2>&1
rc=$?
echo "$(date) - END mdadm - rc=[${rc}]" >> ${logfile}
exit $rc
предостережения: в настоящее время нет доступа к системе GNU / Linux, мета-логирование может запутать то, что вы, возможно, хотели, чтобы вывод mdadm был простым в вашем лог-файле.
Спасибо за вашу помощь.
Проблема заключалась в том, что секция crontab -e не смогла найти команду mdadm (я думаю, это проблема пути).
Итак, вот как я исправил это по-другому:
- переместил мой скрипт в /usr/local/sbin/checkRaid.sh
не использовал crontab -e, а вместо этого использовал файл / etc / crontab и занес туда
*/10 * * * * root /usr/local/sbin/checkRaid.sh
Другими словами: каждые 10 минут мой скрипт запускается от имени пользователя root. Он отлично работал без каких-либо проблем с путями команды mdadm.