码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • linux crontab: ip: command not found


    一、问题来源:

    1、xxxx.sh中会执行某个py文件,这个py文件会执行os.popen(‘ip addr show eth0’).read().split(“inet “)[1].split(”/”)[0];

    2、手动执行某个脚本:sh xxxx.sh;一切正常;

    3、将这个脚本加入crontab中去执行会出现报错;/bin/sh ip command not found

    不太清楚这是为什么?

    二、问题探究:

    1、bash取代sh,参考如下方法:

    在这里插入图片描述

    脚本加入:
    #!/bin/bash
    crontab 执行时:sh --> /usr/bin/bash or bash
    问题依旧

    bash与sh根本区别在于:都是脚本语言,但bash是sh的超集,有更多的功能,这个地方sh不支撑for,但bash支持。所以通过使用bash是可以解决上述问题的。
    在这里插入图片描述
    在这里插入图片描述

    方法二、加入环境变量:

    1、根因定位:

    在xxxx.sh中加入

    echo $PATH
    output:
    /usr/bin
    
    • 1
    • 2
    • 3
    whereis ip
    output:
    /usr/sbin
    
    echo $PATH
    output:
    /usr/bin:/usr/sbin/……
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结论:环境变量的问题导致的;因为在crontab中PATH只有/usr/bin而ip命令是在/usr/sbin目录下;所以需要在crontab中加入/user/sbin才行;

    2、解决方案:
    export PATH=$PATH:/usr/sbin
    
    • 1

    如图所示:
    在这里插入图片描述
    输出结果就正常了:
    在这里插入图片描述
    这方法是有效的

    方法三、

    1、绝对路径执行命令

    ip addr --> /usr/sbin/ip addr
    
    • 1

    方法四、

    1、替换执行命令

    ip addr --> ipaddr #因为ipaddr命令是在/usr/bin目录下的
    
    • 1

    三、结论:

    1、本质是因为环境变量的问题导致的,因为crontab中PATH值个数远小于linux中PATH。
    2、变量执行都是需要在linux中环境路径下寻找的。(如果意识到这个问题,可能就会快速定位到环境变量问题)
    1与2综合得出:很多变量是无法在crontab在执行的,所以手动可以执行成功的

    3、bash与sh的区别:它们可以理解为一种脚本语言,但bash功能比sh要丰富很多,与命令无法被找到是没有关系的;但也会出现如果用sh执行,会bash的某些函数是无法执行的,令crontab失效。
    4、最好的方法是加入环境变量,从根本上解决问题

  • 相关阅读:
    【MySQL入门】第一话 · 初入“数据库”大陆
    【小航的算法日记】数组
    Linux用户操作
    Apollo Planning规划算法仿真调试(11):速度规划ComputeSTBoundary
    chrome 外网很多网站提示验证错误进不去问题
    第1章 基于.Net(Core)框架Web程序的IIS部署发布
    训练深度神经网络,使用反向传播算法,产生梯度消失和梯度爆炸问题的原因?
    webrtc安全性 加密方式
    Verilog基础:三段式状态机与输出寄存
    wifi可以连接,但显示无internet,无网络
  • 原文地址:https://blog.csdn.net/ningyanggege/article/details/127420870
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号