Нет вывода 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.

Другие вопросы по тегам