crontab 提示 command not found 解决方案

crontab 提示 command not found 解决方案

今天遇见一个问题,crontab的定时任务会报错:java command not found,但是手动执行脚本一直能成功。

猜想是环境变量的问题。

在crontab里添加个打印环境变量的任务:

* * * * * echo $PATH

查看crontab日志 /var/log/cron

可以看到,path里只有 /usr/bin和/bin两个目录。

怪不得找不到java。

解决方案:

在shell脚本里加一行

source /etc/profile。

 

 

另转一篇相关文章:http://xiachaofeng.iteye.com/blog/1405184

1.crontab与环境变量

不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以注意如下3点:

1)脚本中涉及文件路径时写全局路径;

2)脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:
cat start_cbp.sh
#!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &
3)当手动执行脚本OK,但是crontab死活不执行时。这时必须大胆怀疑是环境变量惹的祸,并可以尝试在crontab中直接引入环境变量解决问题。如:
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh

2.其他应该注意的问题

1)新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。
2)每条 JOB 执行完毕之后,系统会自动将输出发送邮件给当前系统用户。日积月累,非常的多,甚至会撑爆整个系统。所以每条 JOB 命令后面进行重定向处理是非常必要的: >/dev/null 2>&1 。前提是对 Job 中的命令需要正常输出已经作了一定的处理, 比如追加到某个特定日志文件。
3)当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。
4)千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。
5)在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+\%Y\%m\%d’`。

3.rontab中的输出配置

crontab中经常配置运行脚本输出为:>/dev/null 2>&1,来避免crontab运行中有内容输出。

shell命令的结果可以通过‘> ’的形式来定义输出

/dev/null 代表空设备文件  

> 代表重定向到哪里,例如:echo "123" > /home/123.txt 

1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"

2 表示stderr标准错误

  & 表示等同于的意思,2>&1,表示2的输出重定向等同于1 

那么重定向输出语句的含义:

1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,不显示任何信息。

2>&1 表示标准错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

posted on 2016-08-10 18:11 yin.kh 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/yinkh/p/5757849.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/457435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中文乱码decode_Java中文乱码处理

java编码转换过程我们总是用一个java类文件和用户进行最直接的交互(输入、输出),这些交互内容包含的文字可能会包含中文。无论这些java类是与数据库交互,还是与前端页面交互,他们的生命周期总是这样的:1、程序员在操作系统上通过编…

【设计模式 05】工厂方法模式

工厂方法模式 define an interface or abstract class for creating an object but let the subclasses decide which class to instantiate. 参考: refactoringguru | factory-methodjavatpoint | factory-method-design-pattern博客园| 工厂方法 简单工厂的问题 …

[C++]宏定义#define A B C

C关于宏定义的用法,有形如#define A B C的格式,此时B和C都是已知的字符串常量. 在宏定义中. 可以把两个常量字符串连在一起 如果#define A "a" 那么宏定义#define STRING A "bc" 就相当于 #define STRING "abc" 这里&…

LinkedList类源码浅析(二)

1、上一节介绍了LinkedList的几个基本的方法,其他方法类似,就不一一介绍; 现在再来看一个删除的方法:remove(Object o) remove方法接受一个Object参数,这里需要对参数做空与非空处理; 但是删除一个Object元…

【设计模式 06】原型模式(克隆??)

原型模式(clone?) Prototype pattern refers to creating duplicate object while keeping performance in mind. This type of design pattern comes under creational pattern as this pattern provides one of the best ways to create an object. 参考: tutori…

2016OSC源创会年终盛典-综合技术专场-张小刚

2019独角兽企业重金招聘Python工程师标准>>> 综合技术专场 讲师/SPEAKERS 张小刚 网易云负载均衡项目负责人 《网易蜂巢负载均衡技术实践》从网易蜂巢中的实践出发,分享网易蜂巢负载均衡服务从无到有,从私有云到公有云过程中的技术实践。重点…

python策略模式包含角色_详解Python设计模式之策略模式

虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用。《设计模式:可复用面向对象软件的基础》一书中有 23 个模式,其中有 16 个在动态语言中“不见了,或者简化了”。1、策略模式概述策略模式:定义…

mysql 日期

数据类型 数据类型格式date YYYY-MM-DD datetime YYYY-MM-DD HH:MM:SS timestamp YYYY-MM-DD HH:MM:SS year YYYY 或 YY 具体实现的函数 1、now() 返回当前的日期和时间 SELECT NOW(); 2、curdate() 返回当前的日期 SELECT CURdate(); 3、curtime()返回当…

【Go】panic: reflect: call of reflect.Value.FieldByName on ptr Value

产生原因 调用 FieldByName()方法时,调用者与预期类型不相符。 // 错误代码 func setNewArticleInfoToCache(article *Article) {fields : []string{"Title", "Abstract", "ID", "AuthorID", "CreateTime",}im…

超完整的 Chrome 浏览器客户端调试大全

2019独角兽企业重金招聘Python工程师标准>>> 引言 “工欲善其事,必先利其器” 没错,这句话个人觉得说的特别有道理,举个例子来说吧,厉害的化妆师都有一套非常专业的刷子,散粉刷负责定妆,眼影刷负…

PHP 获取服务器详细信息【转】

碰到此问题,做下记录 获取系统类型及版本号: php_uname() (例:Windows NT COMPUTER 5.1 build 2600)只获取系统类型: php_uname(s) (或&#xff1…

HIVE攻略 JFK_Hive安装及使用攻略

目录Hive的安装Hive的基本使用:CRUDHive交互式模式数据导入数据导出Hive查询HiveQLHive视图Hive分区表1. Hive的安装系统环境装好hadoop的环境后,我们可以把Hive装在namenode机器上(c1)。hadoop的环境,请参考:让Hadoop跑在云端系列文章&#…

MySQL 为什么用索引,为什么是 B+树,怎么用索引

MySQL 索引 A database index is a data structure that improves the speed of operations in a table. Indexes can be created using one or more columns, providing the basis for both rapid random lookups and efficient ordering of access to records. 为什么需要索…

页面加载完毕执行多个JS函数

通常我们需要在打开页面时加载脚本,这些脚本必须在页面加载完毕后才可以执行,因为这时候DOM才完整,可以利用window.onload确保这一点,如:window.οnlοadfirstFunction;这脚本的意思是在页面完毕后执行firstFunction函…

Servlet 生命周期、工作原理

Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁。init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器&…

【Go 并发控制】上下文 context 源码

Context 在 Go 服务中,往往由一个独立的 goroutine 去处理一次请求,但在这个 goroutine 中,可能会开启别的 goroutine 去执行一些具体的事务,如数据库,RPC 等,同时,这一组 goroutine 可能还需要…

js设置全局变量ajax中赋值

js设置全局变量,在ajax中给予赋值赋值不上问题解决方案 方案一、 //在全局或某个需要的函数内设置Ajax异步为false,也就是同步. $.ajaxSetup({async : false}); //然后再进行你的Ajax操作 $.post(地址, 参数, function(data, status) { if (status &q…

iOS开发UI篇—模仿ipad版QQ空间登录界面

一、实现和步骤 1.一般ipad项目在命名的时候可以加一个HD,标明为高清版 2.设置项目的文件结构,分为home和login两个部分 3.登陆界面的设置 (1)设置第一个控制器和自定义的控制器类(登陆)关联 (2&#xff09…

click传值vue_对vue下点击事件传参和不传参的区别详解

如下所示:{{btn_text1}}{{btn_text2}}var _vm new Vue({data : {btn_text1 : 点击1 ,btn_text2 : 点击2},methods : {test_click1 : function (e) {console.log(test_click1--------------------------) ;console.log(e) ;// 输出结果:MouseEvent {isTr…

【Golang 源码】sync.Map 源码详解

sync.Map 不安全的 map go 中原生的 map 不是并发安全的&#xff0c;多个 goroutine 并发地去操作一个 map 会抛出一个 panic package main import "fmt" func main() {m : map[string]int {"1": 1, "2": 2,}// 并发写for i : 0; i < 100;…