crontab 中没有 mdadm -D 输出

no mdadm -D output in 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)

所以这是我的问题: 当我 运行 脚本时,一切都很完美。但是当我重新启动我的计算机时,脚本 运行s,但我的 .log 文件只包含 "just a Test"。 mdadm 命令没有输出。我无法解释为什么 mdadm-command 在这种情况下为空。也许有人可以帮助我。

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

我的猜测是 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 命令的路径问题。

在您的脚本中,您只需添加 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