记录一次condtab任务不生效的坑

1 有个项目上使用的是centos 6.7的环境,然后需要定时杀死一个程序的进程,这个程序有守护进程,杀死它会自动起来,然后我做了一个脚本并加入到定时任务中,最后发现是没有成功执行!

但是手动执行脚本非常好.................. 这个问题困惑了一个上午,最后定位到原因

原因是 crond 定时程序的所开的环境变量和脚本的所使用的环境变量不一样造成的,做如下记录

crontab 的环境变量中的PATH 是 PATH=/usr/bin:/bin

获取crontab 环境变量的方法如下   参考:关于Linux下的crontab,你不知道的那些知识点 - 知乎

*/1 * * * * /usr/bin/env > /tmp/env.txt

cat /tmp/env.txt

但是我要使用pidof 这个命令,这个命令是/sbin/pidof/sbin中的

显然cron执行时会开一个shell,这个环境变量中没有/sbin,所以造成这个情况

找到问题是这样的方法

[root@dahuatech opt]# cat /var/spool/cron/root
*/1 * * * *  sh -x /opt/restartDMS.sh >> /opt/b.txt 2>&1

# 每分钟执行一下我写的脚本,并把整个过程中的错误和正确输出都重定向到一个文件好查看原因
# 查看b.txt后发现报  


########################报错########################
[root@dahuatech opt]# cat b.txt

++ pidof /opt/abc/EEE/DMS
/opt/restartDMS.sh: line 2: pidof: command not found
+ p=
+ sleep 1
+ kill -9
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]

发现定义的变量都没有获取到值 那也就是pidof 没有正常运行,报错中也有提示 command not found

发现这个原因后就直接在脚本中把命令的完整路径都写下来就可以了


[root@dahuatech opt]# cat /opt/restartDMS.sh
#! /bin/bash
p=`/sbin/pidof /opt/DDD/EEE/DMS`
sleep 1
kill -9 $p
#################### 下面是定时任务####################
[root@dahuatech opt]# crontab -l
30 2 * * * /opt/mysql/bin/db_backup_job.sh
0 3 * * * /usr/local/bin/ftp_upload.sh
1 1 * * *  sh -x /opt/restartDMS.sh         #每天凌晨1点1分执行脚本

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值