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
我有以下脚本:
#!/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