Linux中crontab的坑爹环境变量问题

2023-05-16

手动在CentOS中执行sh脚本,调用java程序,一切正常;

将该sh加入crontab中定时调度之后,挂了,完全没有执行到的感觉啊!!!

查看crontab执行日志:

cat /var/log/cron

有执行记录,擦擦擦~~~

难道用crontab调用执行会报错,打印日志先:

crontab -e

40 10 * * * /home/job.sh 2>>/home/log

再调度一次,查看日志:

cat /home/log

还真报错了:


Exception in thread "main" java.lang.ClassFormatError: SystemInfo (unrecognized class file version)  
...

TMD,不能识别的java版本,大胆的怀疑crontab用的环境变量是他自个的:

cat /etc/crontab

果然,crontab自己有一个PATH变量,修改之:

vim /etc/crontab

重新用crontab调用程序,报错依旧,重启之:

service crond restart

再调用,继续报错,难道crontab的PATH是个摆设!


google之,baidu之,原来这是个坑人无数的问题,以下是查到的一些有用的资料:

http://xiachaofeng.iteye.com/blog/1405184

今天遇见一个问题,crontab的定时任务不能自动执行,但是手动执行脚本一直能成功。查到最后,发现是脚本里用了系统的环境变量。下面开始解释:

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.crontab中的输出配置

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 表示标准错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux中crontab的坑爹环境变量问题 的相关文章

  • OpenGL中的变换

    OpenGL中的变换 1 矩阵变换1 1 缩放1 2 平移1 3 旋转1 4 矩阵组合 2 案例实现2 1 缩放 xff1a 2 1 1 等比缩放2 1 2 不等比缩放2 1 3 镜像X方向2 1 4 镜像Y方向 2 2 平移2 2 1 动
  • OpenGL坐标变换

    OpenGL坐标变换 1 坐标系统间的变换1 1 局部空间1 2 世界空间1 3 观察空间裁剪空间1 4 屏幕空间1 5 变换矩阵的组合 2 实现3 渲染部分代码 1 坐标系统间的变换 在渲染管线中 xff0c 物体的顶点在最终转化为屏幕坐
  • OpenGL立方体纹理贴图

    OpenGL正方体纹理贴图 0 写在最前面1 正方体顶点属性构建2 绑定多个VAO VBO3 创建多个纹理4 渲染循环5 实现代码6 多个立方体纹理贴图 0 写在最前面 要实现本篇的内容 xff0c 建议先学习下以下内容 x1f449 多个
  • OpenGL摄像机(Look At矩阵)

    OpenGL摄像机 1 摄像机 观察空间2 Look At3 lookAt 矩阵案例 1 摄像机 观察空间 观察矩阵将所有的世界坐标变换为相对于摄像机位置与方向的观察坐标 当定义一个摄像机时需要它在世界空间中的位置 观察的方向 一个指向它右
  • OpenGL摄像机键盘交互

    摄像机交互 对于摄像机基础实现内容较为生疏的可以参考该文章 x1f449 摄像机lookAt矩阵实现 考虑键盘交互实现opengl摄像机绕着目标物体自由移动 xff0c 首先需要设置一个摄像机系统 xff0c 定义lookAt函数变量 gl
  • Docker迁移以及环境变量问题

    问题一描述 将docker容器通过docker export命令打包 xff0c 传输到另外的服务器 xff0c 再通过docker import命令导入后 xff0c 发现原来docker容器中的环境变量失效了 解决方案 1 无效方案 直
  • OpenGL鼠标视角交互

    OpenGL鼠标视角交互 1 欧拉角2 鼠标输入 1 欧拉角 欧拉角 Euler Angle 是可以表示3D空间中任何旋转的3个值 xff0c 一共有3种欧拉角 xff1a 俯仰角 Pitch 偏航角 Yaw 和滚转角 Roll xff0c
  • 二维数组快速排序sort

    二维数组快速排序sort 1 使用比较函数cmp2 使用lambda表达式 使用c 43 43 的快排函数需要包含头文件 include lt algorithm gt 1 使用比较函数cmp span class token macro
  • OpenGL光照之颜色

    OpenGL光照之颜色 颜色什么是颜色如何表示物体颜色 光照场景的搭建 颜色 什么是颜色 颜色是通过眼 脑和我们的生活经验所产生的一种对光的视觉效应 xff0c 我们肉眼所见到的光线 xff0c 是由频率范围很窄的电磁波产生的 xff0c
  • OpenGL冯氏光照

    OpenGL冯氏光照 1 环境光照 Ambient lighting 2 漫反射光照 Diffuse lighting 3 镜面反射光照 Specular lighting 冯氏光照模型的主要结构由3个分量组成 xff1a 环境 Ambie
  • Magics软件中实现蒙皮偏置

    Magics软件中实现蒙皮偏置 首先导入目标模型 对目标模型进行修复检查 一般比较简单的模型可以直接使用修复即可自动实现修复 xff0c 比较复杂的情况可以使用工具栏里面的操作实现人工修复 xff0c 修复完成后模型的诊断应该都是绿色打钩
  • Geomagic网格重划分与模型光顺

    Geomagic网格重划分与模型光顺 1 网格重划分2 模型光顺 首先先导入模型 xff0c 可以看到模型还是相对较为粗糙 xff0c 面片的法矢方向差别很大 xff0c 因此需要重新划分下网格 1 网格重划分 网格重划分的步骤为 xff1
  • 点集的读入与输出操作

    在MFC框架里实现从文件中读取点集 1 点集读入操作实现代码 xff1a 2 点集输出操作实现代码 xff1a 1 点集读入操作实现代码 xff1a 读入点集数据 ID x y z span class token keyword void
  • OpenGL物体材质

    OpenGL物体材质 定义材质的意义如何实现物体材质物体材质的设置光的属性 定义材质的意义 在现实世界里 xff0c 每个物体会对光产生不同的反应 xff0c 每个物体对镜面高光也有不同的反应 有些物体反射光的时候不会有太多的散射 xff0
  • OpenGL光照贴图

    光照贴图 1 光照贴图的意义2 漫反射贴图3 镜面光贴图 1 光照贴图的意义 现实世界中的物体通常并不只包含有一种材质 xff0c 而是由多种材质所组成 只有光照颜色的材质系统是不够的 xff0c 它只是一个最简单的模型 xff0c 难以模
  • OpenGL光源

    OpenGL光源 0 预备知识点1 平行光2 点光源2 1 简化版点光源2 2 点光源 4 聚光灯4 1 柔化边缘 平滑 0 预备知识点 在学习本节之前 xff0c 需要先掌握一些基础光照的知识 推荐学习以下两篇问章 xff1a 计算机图形
  • GPU并行效率问题——通过MPS提升GPU计算收益

    现象描述 使用V100 32G型号的GPU运行计算程序时 xff0c 发现程序每5秒能够完成一次任务 xff0c 耗费显存6G 鉴于V100 GPU拥有32G的显存 xff0c 还有很多空闲 xff0c 决定同时运行多个计算程序 xff0c
  • 对象数组初始化

    对象数组初始化问题 为什么使用对象数组遇到的问题解决方法 为什么使用对象数组 为了满足用户创建同一个类的多个对象 遇到的问题 应使用 初始化聚合对象不存在默认构造函数 span class token macro property span
  • MFC Check-box与Button结合

    在MFC中经常需要一个按钮能够实现多种功能 xff0c 这个时候可以考虑通过Check box的勾选操作来与其配合实现目标效果 首先在对话框里添加Check box xff0c 并且修改Check box的ID 双击添加好的Check bo
  • MFC+Opencv以图拼图

    MFC 43 Opencv拼图 MFC对话框添加按钮图片准备Opencv配置代码实现 本篇文章主要通过将一系列图片作为拼图的基础 xff0c 实现目标图形的拼图 xff0c 我们先给个结果图可以更直观了解生成的结果是如何的 MFC对话框添加

随机推荐

  • 判断点集与多边形的位置关系

    判断点集与多边形的位置关系 点集与凸多边形点集与一般性多边形 点集与凸多边形 点集或者是点与多边形位置关系无非就三种 点在多边形的内部点在多边形的外部点在多边形上 一般如果该多边形是凸的那么我们可以直接用面积法或者向量法来解决位置关系 xf
  • 模型轮廓提取

    模型轮廓提取 模型边界 孔洞 xff09 识别算法 对于三角网格模型 xff0c 如果存在某一条边只属于一个三角面片 xff0c 那么这个边为模型边界 xff0c 称这条边为模型的边界边 如果一条边同时属于两个三角形 xff0c 则为内部边
  • Opencv推荐学习网站

    中文学习网站网址 xff1a http www opencv org cn http wiki opencv org cn index php E9 A6 96 E9 A1 B5
  • 摄像头动态捕捉小程序

    Opencv摄像头实时捕捉小程序 驱动摄像头加入Canny边缘检测加入Sobel边缘检测 先上一个好玩的动图看看结果 xff1a 驱动摄像头 首先先驱动摄像头 实现的代码如下 xff1a span class token macro pro
  • Opencv图像美颜滤镜

    图像美颜 span class token keyword void span span class token function BeautyFace span span class token punctuation span span
  • Simplify3D打印参数设置

    Simplify3D打印参数设置 关键是打印进程的设定 xff0c 这边以TPU为例子 xff0c 其他材料可以查阅相关参数进行喷头温度 xff0c 打印速度的修改 xff0c 其他的基本一致 设置完成后进行模型切片 xff0c 完成后点击
  • CSDN如何转载一篇博客呢

    看到一篇挺好的文章想要转载怎么做呢 xff1f 方法一 xff1a 傻瓜式复制 不推荐 方法二 后台操作 推荐 方法一 xff1a 傻瓜式复制 不推荐 一个个图文抠 xff0c 效率低下 xff0c 且版面格式会发生变化 方法二 后台操作
  • Exchange 2013升级以及域名绑定等若干问题

    环境简介 Exchange 2013服务器位于ad域中 xff0c 系统为Windows server 2012 R2 xff0c 其内部域名为 xff1a mail ad com 一 Exchange客户端无法在浏览器中正常运行 在域中部
  • 无线攻击 --Wifite(批量破解无线工具)

    文章目录 一 用法概述二 命令格式三 用法示例3 1 破解某个AP 一 用法概述 Wifite使用命令行界面连续攻击多个WPA WPS加密的网络 xff0c 不需要记住参数即可使用它 xff1a 按信号强度排序 xff08 db单位 xff
  • 图像轮廓提取算法(Opencv基于C++实现)

    Opencv图像轮廓提取 0 实现结果如下 xff1a 1 打开图像代码2 轮廓提取函数3 代码实现 本文主要实现了图像的轮廓提取 xff0c 首先先给出直观的轮廓实现结果 xff1a 0 实现结果如下 xff1a 1 打开图像代码 注意图
  • c++实现2048小游戏

    C 43 43 实现2048 2048小游戏界面展示效果图 xff1a span class token macro property span class token directive hash span span class toke
  • OpenGL深度测试

    OpenGL深度测试 1 深度缓冲 Depth Buffer 2 深度缓冲实现3 深度测试函数测试对比4 深度冲突 Z fighting 1 深度缓冲 Depth Buffer 深度缓冲是由窗口系统自动创建的 xff0c 它会以16 24或
  • OpenGL渲染STL三角网格模型

    Opengl绘制STL模型 实现效果STL模型文件实现代码 实现效果 首先先看看使用可编程管线实现的STL模型的渲染效果 xff0c 网格模型的数量大约在100来万 xff0c 实现的效果还是挺鲁棒 STL模型文件 关于STL的文件格式主要
  • Opengl同时显示模型和三角网格线框

    Opengl同时显示模型和三角网格线框 glPolygonMode 函数及相关参数同时显示模型和三角网格线框 glPolygonMode 函数及相关参数 glPolygonMode 参数1 参数2 参数1 可以为 xff1a GL FRON
  • Shader Language编程语言(CG/HLSL/GLSL)

    Shader Language编程语言 Shader Language编程语言 Shader Language编程语言 Shader Language目前主要有3种主流语言 xff1a 基于 OpenGL 的 OpenGL Shading
  • D3D12编译遇到的问题

    D3D12编译遇到的问题 X3501 39 main 39 entrypoint not foundLNK2019 无法解析的外部符号 main xff0c 函数 34 int cdecl invoke main void 34 invok
  • VS2019CPU/内存诊断功能

    VS2019诊断功能 vs代码内存 CPU使用率诊断内存泄漏诊断 vs代码内存 CPU使用率诊断 在代码运行过程中 xff0c 有时候会出现内存泄漏 xff0c 内存 CPU占用过高等情况 xff0c 这些情况的出现十分影响代码的运行效率和
  • C++和Python Java的区别

    C 43 43 和Python Java的区别 C 43 43 执行效率高 xff0c 编程难 开发效率低 Python执行效率低 xff0c 编程简单 开发效率快 C 43 43 为编译性编程语言 xff0c Python 则为解释性编程
  • 实时渲染和离线渲染

    实时渲染和离线渲染 1 实时渲染2 离线渲染3 对比 1 实时渲染 实时渲染指的是一边计算画面 xff0c 一边输出显示 特点是 xff1a 能实时操控 实时交互 xff0c 并且以极高的速度将3D图像处理了 xff0c 同时实现了逼真的效
  • Linux中crontab的坑爹环境变量问题

    手动在CentOS中执行sh脚本 xff0c 调用java程序 xff0c 一切正常 xff1b 将该sh加入crontab中定时调度之后 xff0c 挂了 xff0c 完全没有执行到的感觉啊 xff01 xff01 xff01 查看cro