zoukankan      html  css  js  c++  java
  • linux crontab执行shell脚本中包含相对路径的问题

    实例一 test.sh文件

    echo `date`>test.log

    配置crontab

    设置 */1 * * * * sh /data/test.sh


    在/data/目录下,未找到test.log文件,重启了crontab服务,service cronb restart,发现还是不行。


    在网上找资料,怀疑是相对路径的问题,然后,在home目录下,cd ~,发现了test.log。


    转摘资料:

    crontab执行java程序的问题:

    一 crontab使用注意:
    crontab -l查看该用户的crontab配置,crontab -e编辑该用户的crontab配置配置一般在末尾加上 2>&1表示错误输出(2)和标准输出(1)一样输出到同一个由前面>>指定的地方
    如 15 14 * * * /sys_back/monitor.sh >>/sys_back/log/monitor.log 2>&1
    表示每天14:15执行monitor.sh脚本,错误和标准输出都写入monitor.log文件
    涉及到文件名时最好写绝对路径!

    二 问题及解决
    shell脚本有echo语句,有java -jar执行java程序。直接执行脚本时,一切顺利,但是放到crontab中执行时,echo语句正常,java程序却没有执行。

    1 网上查找,觉得应该是环境变量的问题。说是要将java环境变量加入到shell脚本中,按照
    这个方法做,发现问题依然存在。
    百思不得其解。
    2 经转换角度,看java程序是否有问题。在java语句中直接加入打印语句,发现其在crontab日志中
    居然可以显示。终于确定是java程序的问题。java程序功能很简单,就是一个语句java -Dosgi.console -Dosgi.configuration.area=./configuration -jar equinox.jar -console用来启动osgi框架。
    于是在shell脚本中不调用java程序,直接改为程序中的这一句,问题解决。
    但是又引发新的问题:直接java -jar会源源不断的输出osgi>到日志文件,导致日志文件越来越大。
    不可行。再想办法解决。
    3 感觉还是相对路径的问题。尝试在crontab调用的脚本中用相对路径向一个文件输出一句话,发现失败。(单独执行脚本没问题)既然如此,是不是java程序中也不能用相对路径呢。遂将./configuration及equinox.jar都用绝对路径,再调试,终于成功,至此问题解决。但始终感觉在程序中用绝对路径很不方便维护。

    三 附加问题及解决
    此脚本的作用就是判断osgi程序是否在运行,如果不运行则启动。
    实现思路是ps -elf得到进程id及状态,如果id不存在,则启动,如果id存在但状态不是运行中(solaris为O,AIX为A),则杀掉原进程重新启动。
    发现程序在运行几天后会自动停掉,以为是java程序有问题,然而却始终找不到问题在哪里。在解决上面问题时,却意外的发现可能不是java程序的问题。man ps时发现,solaris中,进程状态除了O,还有S(sleeping) R(Runnable) Z(Zombie僵尸进程)T(stopped),只有后两种状态下进程才是有问题的,所以很可能是crontab执行脚本时,程序状态非O就被杀掉,重启时却因为上面的问题没成功。于是修改脚本,状态是后两种时才重启。这个问题也解决了。


  • 相关阅读:
    Vmware
    Centos8
    Jmeter系列(37)- 详解 ForEach控制器
    【解决】k8s 1.15.2 镜像下载方案
    【解决】MacOS下 Python3.7 使用 pyinstaller 打包后执行报错 Failed to execute script pyi_rth__tkinter
    【解决】venv 的名字在 zsh prompt 中不显示
    【解决】could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network
    《Linux 性能优化实战—倪朋飞 》学习笔记 CPU 篇
    【解决】MongoDB 线上业务处理,数据去重脚本实现
    【解决】docker 容器中 consul集群问题处理
  • 原文地址:https://www.cnblogs.com/ycpanda/p/3637235.html
Copyright © 2011-2022 走看看