2

我有以下脚本:

#!/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-command 是空的。也许有人可以帮助我。

我还应该提到我需要 sudo 来运行脚本(mdadm-command)

4

3 回答 3

1

In your script you just need to add full path of mdadm which is /sbin/mdadm by default

Your script will be like:

#!/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

and no need to change your script file location also using "crontab -e" is OK, just type crontab -e and paste following

@reboot /home/main_usr/myScripts/checkRaid.sh
于 2018-05-31T10:09:21.197 回答
0

我的猜测是mdadm在 crond 的路径上找不到程序文件。

结合其他人已经提出的建议并添加令人痛苦的细节:

  • 确保mdadm在路径上
  • 检查并$?mdadm
  • mdadm冗长地运行
  • 时间盒mdadm调用
  • 检查/var/log/*、、、、 man7.org等$ man cron$ man crontab

所以像:

#!/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 输出的内容。

于 2017-06-03T04:40:11.617 回答
0

谢谢你的帮助。

问题是 crontab -e 部分找不到 mdadm 命令(我认为这是路径问题)。

所以这是我以另一种方式修复它的方法:

  • 将我的脚本移动到 /usr/local/sbin/checkRaid.sh
  • 不要使用 crontab -e 而是使用 /etc/crontab 文件并在那里输入

    */10 * * * * 根 /usr/local/sbin/checkRaid.sh

用正常的话来说:每 10 分钟以 root 身份运行我的脚本。它完美地工作,没有任何 mdadm 命令的路径问题。

于 2017-06-03T11:00:50.487 回答