定时任务执行 报错command not found 解决方案

写在前面

定时任务脚本出现command not found报错,解决方案。

所需知识

  1. 定时任务
  2. shell脚本
  3. 环境变量

问题复现

编写了一个很简单的脚本,查看一下网卡信息。

[root@ecm-98ce ~]# cat ipif.sh
ip a s eth0
echo "---"
ifconfig eth0

在这里插入图片描述
但是将这个脚本放到crontab下执行,就报错了

#crontab
[root@ecm-98ce ~]# crontab -e
crontab: installing new crontab
[root@ecm-98ce ~]# crontab -l
#4. show nic info and save in file
* * * * * /bin/sh /root/ipif.sh &>> /tmp/ipif.info

#报错
[root@ecm-98ce ~]# tail /tmp/ipif.info
/root/exercise/day26/ipif.sh: line 1: ip: command not found
---
/root/exercise/day26/ipif.sh: line 3: ifconfig: command not found

解决方式

方法1. 使用绝对路径的命令:

which ip ifconfig
/usr/sbin/ip
/usr/sbin/ifconfig

[root@ecm-98ce ~]# cat ipif.sh
/usr/sbin/ip a s eth0
echo "---"
/usr/sbin/ifconfig eth0

方法2. 重新加载环境变量:

#1 重写定义环境变量PATH
```shell
[root@ecm-98ce ~]# cat ipif.sh
#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin #添加这行
ip a s eth0
echo "---"
ifconfig eth0

#2 重新加载环境变量

[root@ecm-98ce ~]# cat ipif.sh
#!/bin/bash
source /etc/profile #添加这行
ip a s eth0
echo "---"
ifconfig eth0

成功解决截图

在这里插入图片描述

原理

  • 在定时任务运行命令或脚本的时候,只能识别到/bin或/usr/bin目录下面的命令
  • 只要不在这些目录下面的命令,就要使用绝对路径或者重新定义下PATH环境变量
  • 有部分命令存在在/sbin上的命令,crontab无法默认使用,所以需要使用绝对路径重写PATH变量重新加载环境变量

环境变量中的路径变量PATH 它告诉系统在哪些目录下查找可执行文件的路径,实现可以使用相对路径的命令
ls,系统将自动在PATH中的路径进行查找,查找到/usr/bin/ls后执行

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值