crontab执行java命令失效
一、我们常常碰到在shell下执行某个命令能够成功,比如执行一个java程序:
java -jar /home/opscoder/topo-audit.jar,但是在crontab下执行会失败。
cornjob为 0 10 * * * java -jar /home/opscoder/topo-audit.jar: 即每天10点去执行这个jar中的main方法
二、查找失败的原因,即查看crotab的执行log, 有如下3种方法,我所用的是ubantu的机器,使用的是方法1、 mail任务(Linux UNIX)在 /var/spool/mail/root 文件中,有crontab执行日志的记录,用tail -f /var/spool/mail/root 即可查看最近的crontab执行情况。
2、针对UINX系统查询方法(AIX、HP-UX)
在 /var/spool/cron/tmp文件中,有croutXXX00999的tmp文件,tail 这些文件就可以看到正在执行的任务了。
3、针对Linux系统的查询方法(含Redhat、SUSE)
看 /var/log/cron这个文件就可以,可以用tail -f /var/log/cron观察
配图为系统aix root用户默认的crontab
三、针对我的情况,从log中可以看出是/bin/sh: java command not found
这就说明了cron使用的环境变量不是系统的环境变量,而是自己的环境变量,说白了,就是crontab不能读取到/etc/profile下的信息。
四、解决方法:
1、修改crontab来调用一个脚本,而不是直接执行这个jar
即将:cornjob为 0 10 * * * java -jar /home/opscoder/topo-audit.jar
修改为:0 10 * * * /home/opscoder/topo-check.sh
2、创建topo-check.sh
touchtopo-check.sh #创建topo-check.sh文件
vi topo-check.sh #编辑topo-check.sh文件,并输入如下内容
#!/bin/bash
source /etc/profile
java -jar /home/opscoder/topo-audit.jar
保存退出。
chmod +x topo-check.sh #给topo-check.sh可执行权限
这样就大功告成了,需要注意的是需要加上#!/bin/bash,不然crontab可能还是不能执行成功,使用如上的3中方法之一来查看crontab的log,你会发现类似: /bin/sh command /home/opscoder/topo-check.sh not found
附:如果当前用户不能启动crontab,可以使用具有sudo权限或者具有启动权限(service)的用户先启动crontab(service
cron status, service cron start, service cron start),然后再切回该用户创建或者cron
job(crontab -e)
crontab执行java命令失效的更多相关文章
- 穿越之旅之--android中如何执行java命令
android的程序基于java开发,当我们接上调试器,执行adb shell,就可以执行linux命令,但是却并不能执行java命令. 那么在android的shell中是否就不能执行java程序了 ...
- Android 如何执行java命令
android的程序基于java开发,当我们接上调试器,执行adb shell,就可以执行linux命令,但是却并不能执行java命令. 那么在android的shell中是否就不能执行java程序了 ...
- CentOS下crontab执行java程序
阿里云CentOS收不到邮件 在crontab里配置执行脚本,脚本用来执行java程序,死活不执行.单独执行脚本可以运行. 查看crontab的日志文件,/var/log/cron,发现没有收到cro ...
- 在执行Java命令或eclipse启动程序,提示报错’jvm.cfg无法找到’的解决办法
一.问题背景 昨天debug代码的时候,突然发现无法启动程序了.每次启动程序的时候均报如下错误:(回家以后重现了下这个问题.发现不同电脑,所在的lib下的文件夹不一样,应该和jdk安装时硬件的情况有关 ...
- 通过adb命令在Android设备中执行Java命令, 并调用so文件。
一.难点一:无法复制so文件到/system/lib或者/vendor/lib下,提示只读 解决方法: 2.使用android device monitor放库进入到 /system/lib出现只读权 ...
- 在命令符模式下编译并执行Java程序
对于Java初学者,建议使用纯文本文件来编写Java程序,并在命令符模式下使用工具程序编译和执行Java程序.使用javac工具编译.java,使用java工具执行.class.(推荐sublime编 ...
- linux定时任务crontab怎样执行root命令
在/var/spool/cron/文件夹下放置了所有定时任务文件, 1.运行crontab -u $用户名 -e会显示$用户的所有定时任务: 2.运行sudo crontab -e会显示root用户所 ...
- crontab执行脚本失败问题
如果脚本在终端执行正常,而在crontab里执行失败, 一般跟root用户无关,而是和系统变量有关,一般加上绝对路径执行java命令即可: /usr/java/jdk/bin/java xxx.jar
- javac 及 java命令的使用问题(错误或无法加载主类)
一.问题 使用 javac 命令编译完.java源文件后,用 java 命令运行.class文件时,通常会遇到如下或类似的问题: 错误: 找不到或无法加载主类 HelloWorld.class 二.解 ...
随机推荐
- Gradle – Spring 4 MVC Hello World Example
In this tutorial, we will show you a Gradle + Spring 4 MVC, Hello World Example (JSP view), XML conf ...
- C#简单应用spring的例子
接口定义 namespace SpringDemo { interface IOper { void Say(); } } 此接口的两个实现 实现1 using System; namespace S ...
- Enterprise Library 4 数据访问应用程序块
Enterprise Library 数据访问应用程序块简化了实现常规数据访问功能的开发任务.应用程序可以在各种场景中使用此应用程序块,例如为显示而读取数据.传递数据穿过应用程序层( applicat ...
- Wifi热点工具-青青草原WiFi
有时只有有线网络,但手机需要上网,这时需要将笔记本作为无线热点. 青青草原WiFi,这个工具用起来挺方便,http://www.22zy.net/.
- iOS开发-block使用与多线程
Block Block封装了一段代码,可以在任何时候执行 Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值. 苹果官方建议尽量多用block.在多线程.异步任务.集合遍历. ...
- PostgreSQL的 initdb 源代码分析之十一
继续分析: /* Top level PG_VERSION is checked by bootstrapper, so make it first */ write_version_file(NUL ...
- HDOJ 1151 Air Raid
最小点覆盖 Air Raid Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- delphi execCommand
WebBrowser1.Document as IHTMLDocument2 关键点 function execCommand(const cmdID: WideString; showUI: Wor ...
- 进程和cpu的相关知识和简单调优方案
进程就是一段执行的程序,每当一个程序执行时.对于操作系统本身来说,就创建了一个进程,而且分配了相应的资源.进程能够分为3个类别: 1.交互式进程(I/O) 2.批处理进程 (CPU) ...
- SQL Server中DML语句要申请的锁
对于select语句: 1.当採用表扫描时,会直接锁定page,而不是锁定详细的某条记录,所以会有这些锁: A.数据库S锁 B.表的IS锁 C.页的S锁 2.当採用索引来查找数据时,会锁定详细的记录, ...