实例一 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就被杀掉,重启时却因为上面的问题没成功。于是修改脚本,状态是后两种时才重启。这个问题也解决了。

linux crontab执行shell脚本中包含相对路径的问题的更多相关文章

  1. Linux 定时执行shell脚本_crontab

    1.查看任务[oracle@XXXXX OracleBackA]$ crontab -l 2.新增任务[oracle@XXXXX OracleBackA]$ crontab -e 3.每天14点40执 ...

  2. 记录一次 Linux crontab 执行django 脚本 失败 的经历和解决办法

    目的是想通过定时任务来执行一次数据统计,本来可以用celery来做,但是想着这个项目整个就没用到异步的地方,所以决定用crontab来做.之前做过数据库的热备份,想来用该没啥问题,但是现实打脸啪啪响. ...

  3. Linux终端执行shell脚本,提示权限不够的解决办法

    原文:http://blog.csdn.net/this_capslock/article/details/17415409 今天在Linux尝试搭建dynamips的工作环境,在执行shell脚本时 ...

  4. 使用crontab,让linux定时执行shell脚本

    阅读目录 1. cron服务[Ubuntu环境] 2. crontab用法 3. 编辑crontab文件 4. 流程举例 5. 几个例子 Linux中,周期执行的任务一般由cron这个守护进程来处理. ...

  5. 【Linux】使用crontab,让linux定时执行shell脚本

    阅读目录 1. cron服务[Ubuntu环境] 2. crontab用法 3. vim编辑crontab文件 4.Cron各项描述 5.例子解释 Linux中,周期执行的任务一般由cron这个守护进 ...

  6. Linux 定时执行shell脚本命令之crontab

    crontab可以在指定的时间执行一个shell脚本以及执行一系列Linux命令 例如:服务器管理员定时备份数据库数据.日志等 详解: 常用命令: crontab –e //修改 crontab 文件 ...

  7. 【转】linux 定时执行shell脚本

    在oracle 中可以利用dbms_job包定时执行pl/sql.sql过程,在像备份等需要在操作系统级定时任务只能采用crontab来完成 本文讲述crontab具体用法,以供备忘. 在oracle ...

  8. linux 定时执行shell脚本

    转自:http://blog.csdn.net/jingxiangren/article/details/4745631 在oracle 中可以利用dbms_job包定时执行pl/sql.sql过程, ...

  9. linux定时执行shell脚本

    写一个shell脚本,定时执行简单示例 很多时候我们有希望服务器定时去运行一个脚本来触发一个操作,比如说定时去备份服务器数据.数据库数据等 不适合人工经常做的一些操作这里简单说下 Shell俗称壳,类 ...

随机推荐

  1. Kubernetes-DNS

    Kubernetes提供的虚拟DNS服务名为skydns,由四个组件组成: etcd:DNS存储 kube2sky:将Kubernetes Master中的Service(服务)注册到etcd sky ...

  2. Spring MVC怎么统一异常管理?

    1. 在类上加上@ControllerAdvice注解 2. 在方法上加上@ExceptionHandler注解 @ExceptionHandler(Exception.class) @Respons ...

  3. 笔记-python-常见特殊变量

    笔记-python-常见特殊变量 类似__xx,以双下划线开头的实例变量名,就变成了一个私有变量(private),只有内部可以访问,外部不能访问: 类似__xx__,以双下划线开头,并且以双下划线结 ...

  4. 微信H5支付 在其他浏览器调用微信支付

    微信H5支付的相关资料不是很多.不过步骤上来说不是很复杂 比公众号支付简单很多. 先上官方文档吧 https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapt ...

  5. jmeter接口测试--参数化

    接口测试时遇到一些属性不能重复时,可以使用Random 随机函数,除此之外,也可以用用户参数 一..随机参数化 1.在jmeter工具,菜单-选项-函数助手对话框,输入数值,属性,点击生成: 2.在相 ...

  6. 安装arch系统时,把ubuntu的efi分区格式化

    导致无法从grub进入ubuntu,之后我进入win10,把ubuntu的分区都删了. 再重启,只能进入黑色的grub界面,显示 grub>> 甚至无法进入win10.只能通过在开机时按F ...

  7. errno -4058 and npm WARN enoent ENOENT 解决方案

    1.报错如下: npm WARN checkPermissions Missing write access to C:\Users\hejinrong\AppData\Roaming\npm\nod ...

  8. centos tomcat开机自启

    在 /etc/rc.local 下 输入tomcat bin目录下的startup.sh  /usr/tomcat8/bin/startup.sh 即可

  9. [比赛总结]ACM div3 G 比赛总结

    这次题目总体感觉和做阅读理解差不多,英文题目读起来相当费劲. 另外,这次比赛整个队伍中我们三个都突出存在的问题就是,把简单问题复杂化,抓不到事物的本质,因此很容易的就被题目误导. 比如C题,明明想到了 ...

  10. iterator 的设计原则和traits

    iterator我前面写过是作为algorithm和container之间的一个桥梁,algorithm进程操作的时候向iterator进行提问,iterator并对提问进行了回答,其中主要就是回答5 ...