问题
写了一个脚本,比如在/root目录下有个a.sh,
date > /root/a.txt
hostname >> /root/a.txt
echo $PATH >> /root/a.txt
pwd >> /root/a.txt
lsmod >> /root/a.txt
whoami >> /root/a.txt
加到crontab里
[root@vm100-1-10-30 ~]# crontab -l
* * * * * sh /root/a.sh
[root@vm100-1-10-30 ~]# cat a.txt
Wed Dec 2 10:18:01 CST 2020
vm100-1-10-30.ksc.com
/root
root
什么个情况,lsmod没有执行???
分析
手动执行下
[root@vm100-1-10-30 ~]# lsmod
Module Size Used by
binfmt_misc 17468 1
dm_mirror 22135 0
dm_region_hash 20862 1 dm_mirror
直接执行脚本
[root@vm100-1-10-30 ~]# sh a.sh
[root@vm100-1-10-30 ~]# cat a.txt
Wed Dec 2 10:21:12 CST 2020
vm100-1-10-30.ksc.com
/root
Module Size Used by
binfmt_misc 17468 1
dm_mirror 22135 0
dm_region_hash 20862 1 dm_mirror
dm_log 18411 2 dm_region_hash,dm_mirror
dm_mod 114430 2 dm_log,dm_mirror
crc32_pclmul 13113 0
那问题出在哪里了呢??
脚本里再增加一行
echo $PATH
crontab里输出
/usr/bin:/bin
在命令行里执行输出结果
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64/bin:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64/jre/bin:/opt/rh/devtoolset-8/root/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/tools/apache-jmeter-5.3/bin:/root/bin
再查看lsmod的路径
# which lsmod
/usr/sbin/lsmod
/usr/sbin不在crontab的标准路径里。
解决方法
- 在脚本里使用绝对路径
/usr/sbin/lsmod - 在脚本中先设置环境变量
先执行source /etc/profile - 修改crontab的配置/etc/crontab (好像不管用)