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 二.解 ...
随机推荐
- [iOS 多线程 & 网络 - 2.0] - 发送接收 服务器信息
A.搭建java服务器 使用eclipse.tomcat和struts2框架搭建一个简单的服务器 1.准备好合适版本的JDK.eclipse EE.tomcat.struts2 框架包 2.配置JDK ...
- mysql删除重复记录语句,删除除了 id 号不同,其他都相同的学生冗余信息
/** 在Mysql下执行: delete from my.stu where id not in( select min(id) id from my.stu group by code) ; 用途 ...
- 【JDBC】预编译SQL与防注入式攻击
在JDBC编程中,常用Statement.PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedS ...
- Debug Tools
.NET专用调试工具:MDBG .NET的死锁调试工具:ACorns.Debugging WinDBG+SOS(Windows平台下最强DeBug工具,是解决BUG的最后手段)
- 安卓任意两个或多个Fragment之间的交互与刷新界面
平时项目中遇到一个问题:在子fragment中刷新父fragment的界面,通俗的说也就是在任何一个fragment中来刷新另一个fragment.大家都知道activity和fragment之间的交 ...
- 通过克隆MAC地址 破解网通电信封路由
通过克隆MAC地址 破解网通电信封路由 电信封路由方法一:先确定申请上网的电脑单机状态下已经能够上网.就说明该电脑网卡的MAC地址是合法的MAC地址.进入系统的MSDOS方式,发布ipconfig/a ...
- 教你50招提升ASP.NET性能(十四):使用startMode属性来减少ASP.NET站点加载时间
(25)Use the startMode attribute to reduce the load time for your ASP.NET site 招数25: 使用startMode属性来减少 ...
- Android EditText载入HTML内容(内容包括网络图片)
android中的Html.fromHtml能够用来载入HTML的内容.fromHtml有三个參数须要设置,第一个是要显示的html内容,第二个就是要说的重点,ImageGetter,用来处理图片载入 ...
- LeetCode: Word Break II [140]
[题目] Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where ...
- Codeforces Round #328 (Div. 2) B. The Monster and the Squirrel 打表数学
B. The Monster and the Squirrel Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/c ...