博客
关于我
Linux执行Cron Job失败,在Shell sh下执行却能成功 - 环境变量?
阅读量:796 次
发布时间:2023-02-04

本文共 1147 字,大约阅读时间需要 3 分钟。

在使用Linux系统时,可能会遇到以下情况:某个命令在直接在shell下执行时没有问题,但在crontab定时任务中却失败。例如,执行命令java -jar /home/opscoder/topo-audit.jar在shell下能成功,但在crontab中设置为每天的凌晨10点执行却会失败。

为了解决这个问题,首先需要查看crontab执行日志以确定具体错误原因。不同Linux发行版的日志存储位置有所不同:

  • 在Ubuntu等Debian系统中,crontab的日志可以通过检查/var/spool/mail/root文件来观察。使用tail -f /var/spool/mail/root可以实时查看最近的日志。

  • 在AIX或HP-UX系统中,crontab的日志存储在/var/spool/cron/tmp目录下。通过查看这个目录下的临时文件可以看到任务执行情况。

  • 在RedHat、SUSE等Linux发行版中,crontab的日志通常位于/var/log/cron文件中。使用tail -f /var/log/cron可以实时查看任务执行情况。

  • 通过查看日志可以发现,错误提示为/bin/sh: java command not found。这意味着crontab使用的并非系统的环境变量,而是其自身的环境变量。通常,crontab会从/bin/sh环境中获取命令解释器,而不是从/etc/profile获取。因此,当需要执行需要特定环境变量的命令时,直接在crontab中运行可能会失败。

    为了解决这个问题,可以采取以下方法:

  • 通过脚本间接执行命令:将crontab任务从直接执行Java程序改为执行一个脚本。例如,将crontab任务修改为:

    0 10 * * * /home/opscoder/topo-check.sh

    这样可以避免crontab直接解析命令,减少环境变量相关的问题。

  • 创建并执行脚本:创建一个名为topo-check.sh的bash脚本,内容如下:

  • #!/bin/bashsource /etc/profilejava -jar /home/opscoder/topo-audit.jar

    然后赋予脚本执行权限:

    chmod +x topo-check.sh

    这样可以确保脚本在执行时使用正确的环境变量,避免crontab解析命令时的环境变量问题。如果当前用户无法启动crontab,可以通过以下步骤解决:1. 使用具有sudo权限或启动权限的用户先启动crontab服务:

    service cron start

    2. 切回原用户后,再次创建或编辑crontab任务:

    crontab -e

    通过以上方法,可以成功解决crontab执行Java程序失败的问题。

    转载地址:http://mbkfk.baihongyu.com/

    你可能感兴趣的文章
    linux控制用户密码失效时间
    查看>>
    linux搜索命令---find
    查看>>
    Linux搭建DHCP服务
    查看>>
    Linux搭建FTP服务(附FTP Server 服务器客户端工具)
    查看>>
    Linux搭建HTTP服务
    查看>>
    Linux搭建NFS服务器
    查看>>
    Linux搭建NTP服务器
    查看>>
    Linux搭建SFTP服务器
    查看>>
    Linux搭建SMB服务
    查看>>
    Linux搭建ss5 (socks5)代理服务器
    查看>>
    Linux搭建Telnet服务
    查看>>
    Linux搭建TFTP服务
    查看>>
    Linux搭建局域网yum源和后期在yum源中更新rpm包方法
    查看>>
    Linux搭建测试环境详细步骤
    查看>>
    Linux操作系统加固
    查看>>
    Linux操作系统基础命令
    查看>>
    Linux操作系统安装与gcc和内核升级
    查看>>
    Linux改变文件所有者
    查看>>
    Linux文件内容查询命令
    查看>>
    Linux文件基本属性详解
    查看>>