【案例分享】crontab执行脚本异常问题
很多时候我们会遇见这种情况,我们千辛万苦写了一个脚本,经过测试,一切正常,然后放到了crontab里面执行,结果,不管怎么配置,就是执行不正常。
结果发现环境问题,居然是这个异常的元凶。
我们先在我们的服务器上执行env命令,出现如下:
XDG_VTNR=
XDG_SESSION_ID=
HOSTNAME=bogon
IMSETTINGS_INTEGRATE_DESKTOP=yes
GPG_AGENT_INFO=/run/user//keyring/gpg::
VTE_VERSION=
TERM=xterm
SHELL=/bin/bash
XDG_MENU_PREFIX=gnome-
HISTSIZE=
GJS_DEBUG_OUTPUT=stderr
WINDOWID=
GJS_DEBUG_TOPICS=JS ERROR;JS LOG
IMSETTINGS_MODULE=IBus
QT_GRAPHICSSYSTEM_CHECKED=
USER=root
SSH_AUTH_SOCK=/run/user//keyring/ssh
USERNAME=root
SESSION_MANAGER=local/unix:@/tmp/.ICE-unix/,unix/unix:/tmp/.ICE-unix/
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
MAIL=/var/spool/mail/root
DESKTOP_SESSION=gnome
QT_IM_MODULE=ibus
PWD=/root
XMODIFIERS=@im=ibus
LANG=zh_CN.UTF-
GDM_LANG=zh_CN.UTF-
KDEDIRS=/usr
GDMSESSION=gnome
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
HISTCONTROL=ignoredups
HOME=/root
XDG_SEAT=seat0
SHLVL=
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
XDG_SESSION_DESKTOP=gnome
LOGNAME=root
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-VQpgyslPbO,guid=0b7c6ec0e15a92dd89a8eaf654f84153
LESSOPEN=||/usr/bin/lesspipe.sh %s
WINDOWPATH=
XDG_RUNTIME_DIR=/run/user/
DISPLAY=:
XDG_CURRENT_DESKTOP=GNOME
XAUTHORITY=/run/gdm/auth-for-root-A4DlSi/database
_=/usr/bin/env
然后我们编辑一个crontab,如下:
* * * * * env > /home/crontab.out
然后我们在/home/crontab.out文件中,看看里面的内容。令人奇怪的是,我们发现的里面的信息只有
XDG_SESSION_ID=
SHELL=/bin/sh
USER=root
PATH=/usr/bin:/bin
PWD=/root
LANG=zh_CN.UTF-
SHLVL=
HOME=/root
LOGNAME=root
XDG_RUNTIME_DIR=/run/user/
_=/usr/bin/env
我们先不讨论原因,这里,我们就可以看到为什么很多脚本在crontab中编辑后不可以运行了。因为crontab的任务环境就没有定义那么多的环境变量,我们在交互式的环境下写的脚本中用到了这些没有的环境变量,当然可以通过,但是放到crontab下就不行了。
那么这些环境变量居然差那么多,为什么呢?因为系统的cron deamon会自动设置可构成最小环境的环境变量。
解决方案可以有两种:
1. 定义好一些环境参数,并在crontab里面先source生效,再执行主程序脚本
2. 直接把脚本中的环境变量改为绝对路径。
【案例分享】crontab执行脚本异常问题的更多相关文章
- crontab执行脚本中文乱码,手动执行没有问题
crontab执行脚本中文乱码,手动执行没有问题 产生原因: 这是因为Unix/Linux下使用crontab时的运行环境已经不是用户环境了,因此原本用户下的一些环境变量的设置就失效了.例 ...
- 在测试crontab执行脚本的时候,修改了linux的系统时间,crontab不执行了。
今天在写服务器的perl脚本的时候,在完成一版脚本打算通过crontab来测试一下呢,因为直接执行脚本文件是没有问题的,但是当配置到crontab定期执行时就会出现问题,到了指定的时间了,但是脚本文件 ...
- crontab执行脚本和手动执行脚本输出结果不一致的问题处理
背景:huskiesir最近用公司给分配的账户写了脚本去检测某应用状态并发送到企业邮箱,写完脚本之后去执行了一下,发现效果还不错,在邮箱显示效果如下: 10.11.116.6 检查结果OK,检查时间 ...
- crontab执行脚本失败问题
如果脚本在终端执行正常,而在crontab里执行失败, 一般跟root用户无关,而是和系统变量有关,一般加上绝对路径执行java命令即可: /usr/java/jdk/bin/java xxx.jar
- crontab 执行脚本,报错/home/scripts/eyeMonitor.sh: line 8: node: command not found
报错现象:在shell下执行node没有任何问题,但crontab自动运行就会报错. 原因:node的安装路径:/root/.nvm/versions/node/v6.7.0/bin/node Sh ...
- centos cron 自动执行脚本异常 命令不生效的解决办法
办法: 1.sh脚本加入 source /etc/profile 2.非系统命令,要写绝对路径
- crontab执行脚本与手动执行结果不一致
反正网上说是环境变量问题,我就直接在脚本第二行加入以下代码: source /etc/profile source ~/.bashrc 问题是解决了!
- 在crontab中执行脚本重要事项
crontab不能成功执行shell脚本的可能原因 crond进程不存在,该进程是crontab的守护进程,它必须存在才能让crontab正常使用: 系统时间不对: 环境变量的问题:crontab执行 ...
- linux crontab执行shell脚本中包含相对路径的问题
实例一 test.sh文件 echo `date`>test.log 配置crontab 设置 */1 * * * * sh /data/test.sh 在/data/目录下,未找到test.l ...
随机推荐
- [Swift]LeetCode552. 学生出勤记录 II | Student Attendance Record II
Given a positive integer n, return the number of all possible attendance records with length n, whic ...
- [Swift]LeetCode640. 求解方程 | Solve the Equation
Solve a given equation and return the value of x in the form of string "x=#value". The equ ...
- [Swift]LeetCode713. 乘积小于K的子数组 | Subarray Product Less Than K
Your are given an array of positive integers nums. Count and print the number of (contiguous) subarr ...
- 别再写 bug 了,避免空指针的 5 个案例!
空指针是我们 Java 开发人员经常遇到的一个基本异常,这是一个极其普遍但似乎又无法根治的问题. 本文,栈长将带你了解什么是空指针,还有如何有效的避免空指针. 什么是空指针? 当一个变量的值为 nul ...
- linux安装字体方法
1.查看系统中文字体 #fc-list :lang=zh 2.如果提示commont not fount 说明为安装fontconfig 3.安装fontconfig #yum -y install ...
- qt之菜单项定制
qt实现菜单,简单的界面QMenu+QAction完全可以实现,在加上qss的支持,可以定制出比较美观的菜单,qt的菜单一般用在托盘.按钮和工具栏上. 当然啦,也有很多软件有比较美观的托盘菜单,比如3 ...
- springboot+mybatis+dubbo+aop日志终结篇
之前的几篇文章把dubbo服务层都介绍完毕,本篇文章咱们主要写web层如何调用服务层的方法.文章底部附带源码. 启动服务 服务启动时,会向zk注册自己提供的服务,zk则会记录服务提供者的IP地址以及暴 ...
- 为 docker 中的 nginx 配置 https
没有 https 加持的网站会逐渐地被浏览器标记为不安全的,所以为网站添加 https 已经变得刻不容缓.对于商业网站来说,花钱购买 SSL/TLS 证书并不是什么问题.但对于个人用户来说,如果能有免 ...
- Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署
一.环境需求 本帖针对的是Linux环境,Windows或其他系统也可借鉴.具体只讲述Jenkins配置以及整个流程的实现. 1.JDK(或JRE)及Java环境变量配置,我用的是JDK1.8.0_1 ...
- ZXing 生成、读取二维码(带logo)
前言 ZXing,一个支持在图像中解码和生成条形码(如二维码.PDF 417.EAN.UPC.Aztec.Data Matrix.Codabar)的库.ZXing(“zebra crossing”)是 ...