linux关于crontab自动执行shell脚本出现的不能执行命令问题
写了一个shell脚本,用来测试fdisk和df -hT 硬盘识别和挂载情况。把它放进crontab里面想定期执行,并保存数据。结果出现了问题。。。通过计划任务执行fdisk好像没有执行识别不到机器里面的硬盘,机器上sh xx.sh执行显示正常,就是计划任务不行?以下是脚本
#!/bin/bash
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
IP=`hostname -I|sed 's/[[:space:]]//g'`
`df -hT | grep nfs | wc -l >/tmp/dfno.txt`
`fdisk -l |grep TiB | wc -l >/tmp/fdno.txt`
`cat /home/chiauser/.chia/mainnet/config/config.yaml | grep nfs |wc -l >/tmp/chno.txt`&&
dfno=`cat /tmp/dfno.txt`
FDno=`cat /tmp/fdno.txt`
content1=""挂载磁盘数量":`df -hT | grep nfs | wc -l`-"fdisk识别数量":`fdisk -l | grep TiB | wc -l`-"chia配置磁盘数量":`cat /home/chiauser/.chia/mainnet/config/config.yaml | grep nfs |wc -l`"
if [ "$dfno" -ne "$FDno" ];then
echo "$FDno"
curl http://ntlog.zhanglirong.cn/log?type=3&file_path=${IP}&name=挂载磁盘数量不正常请检查配置&content=${content1}¬ice=1
fi
是什么原因让crontab把我的fdisk、ifconfig命令忽视了呢?
后来百度下发现:是因为 crontab 的 环境的问题,在crontab自动执行时,它不会加载PATH全部路径,我们必须在脚本里面声明出来。所以添加如下代码在shell脚本中。
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
然后就搞定啦。
#!/bin/bash
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
IP=`hostname -I|sed 's/[[:space:]]//g'`
`df -hT | grep nfs | wc -l >/tmp/dfno.txt`
`fdisk -l |grep TiB | wc -l >/tmp/fdno.txt`
`cat /home/chiauser/.chia/mainnet/config/config.yaml | grep nfs |wc -l >/tmp/chno.txt`&&
dfno=`cat /tmp/dfno.txt`
FDno=`cat /tmp/fdno.txt`
content1=""挂载磁盘数量":`df -hT | grep nfs | wc -l`-"fdisk识别数量":`fdisk -l | grep TiB | wc -l`-"chia配置磁盘数量":`cat /home/chiauser/.chia/mainnet/config/config.yaml | grep nfs |wc -l`"
if [ "$dfno" -ne "$FDno" ];then
echo "$FDno"
curl http://ntlog.zhanglirong.cn/log?type=3&file_path=${IP}&name=挂载磁盘数量不正常请检查配置&content=${content1}¬ice=1
fi
是什么原因让crontab把我的fdisk、ifconfig命令忽视了呢?
后来百度下发现:是因为 crontab 的 环境的问题,在crontab自动执行时,它不会加载PATH全部路径,我们必须在脚本里面声明出来。所以添加如下代码在shell脚本中。
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
然后就搞定啦。