crontab执行脚本异常问题,jenkins定时启动

很多时候我们会遇见这种情况,我们千辛万苦写了一个脚本,经过测试,一切正常,然后放到了crontab里面执行,结果,不管怎么配置,就是执行不正常。

1、在所需用户下(crontab -e 创建定时任务

简单的弹窗效果

结果发现环境问题,居然是这个异常的元凶。

2、进行编写定时任务内容,内容如下

首先是上网查了ubuntu中的弹窗命令,发现notify-send这个命令就能满足要求了

我们先在我们的服务器上执行env命令,出现如下:

图片 1

notify-send ["该休息一下啦"] "喝水!伸懒腰!动一动!"
 1 XDG_VTNR=1
 2 XDG_SESSION_ID=1
 3 HOSTNAME=bogon
 4 IMSETTINGS_INTEGRATE_DESKTOP=yes
 5 GPG_AGENT_INFO=/run/user/0/keyring/gpg:0:1
 6 VTE_VERSION=3802
 7 TERM=xterm
 8 SHELL=/bin/bash
 9 XDG_MENU_PREFIX=gnome-
10 HISTSIZE=1000
11 GJS_DEBUG_OUTPUT=stderr
12 WINDOWID=37748743
13 GJS_DEBUG_TOPICS=JS ERROR;JS LOG
14 IMSETTINGS_MODULE=IBus
15 QT_GRAPHICSSYSTEM_CHECKED=1
16 USER=root
17 SSH_AUTH_SOCK=/run/user/0/keyring/ssh
18 USERNAME=root
19 SESSION_MANAGER=local/unix:@/tmp/.ICE-unix/1672,unix/unix:/tmp/.ICE-unix/1672
20 PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
21 MAIL=/var/spool/mail/root
22 DESKTOP_SESSION=gnome
23 QT_IM_MODULE=ibus
24 PWD=/root
25 XMODIFIERS=@im=ibus
26 LANG=zh_CN.UTF-8
27 GDM_LANG=zh_CN.UTF-8
28 KDEDIRS=/usr
29 GDMSESSION=gnome
30 SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
31 HISTCONTROL=ignoredups
32 HOME=/root
33 XDG_SEAT=seat0
34 SHLVL=2
35 GNOME_DESKTOP_SESSION_ID=this-is-deprecated
36 XDG_SESSION_DESKTOP=gnome
37 LOGNAME=root
38 DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-VQpgyslPbO,guid=0b7c6ec0e15a92dd89a8eaf654f84153
39 LESSOPEN=||/usr/bin/lesspipe.sh %s
40 WINDOWPATH=1
41 XDG_RUNTIME_DIR=/run/user/0
42 DISPLAY=:0
43 XDG_CURRENT_DESKTOP=GNOME
44 XAUTHORITY=/run/gdm/auth-for-root-A4DlSi/database
45 _=/usr/bin/env

将日志追加到 log中

弹窗效果

 

0 * * * *  /home/tomcat/restar_jslave.sh >> con_jenkins_crontab.log 2>&1 &

图片 2

然后我们编辑一个crontab,如下:

3、保存定时任务

弹窗效果有了,然后应该是一个定时弹窗的功能

* * * * * env > /home/crontab.out

4、crontab -l 查看已有的定时任务

一、cron命令实现定时弹窗

 

5、将定时任务 chmod 755 权限

想到的是cron命令,google了很多教程,都没有成功

然后我们在/home/crontab.out文件中,看看里面的内容。令人奇怪的是,我们发现的里面的信息只有

遇到的问题:

在/etc/crontab 中加入了

 1 XDG_SESSION_ID=3
 2 SHELL=/bin/sh
 3 USER=root
 4 PATH=/usr/bin:/bin
 5 PWD=/root
 6 LANG=zh_CN.UTF-8
 7 SHLVL=1
 8 HOME=/root
 9 LOGNAME=root
10 XDG_RUNTIME_DIR=/run/user/0
11 _=/usr/bin/env

在执行定时任务时,提示java commond not find

* * * * * root notify-send ["该休息一下啦"] "喝水!伸懒腰!动一动!"

 

解决方法:在conn_jenkins脚本中,添加java的绝对路径(xx/xx/bin)

也用命令编辑了

我们先不讨论原因,这里,我们就可以看到为什么很多脚本在crontab中编辑后不可以运行了。因为crontab的任务环境就没有定义那么多的环境变量,我们在交互式的环境下写的脚本中用到了这些没有的环境变量,当然可以通过,但是放到crontab下就不行了。

具体路径,env查看

crontab -e

 

或者 定时任务的shell脚本中增加 source /etc/profile 若 无效

同时也启动了cron服务

那么这些环境变量居然差那么多,为什么呢?因为系统的cron deamon会自动设置可构成最小环境的环境变量。

0 * * * * ./etc/profile; /home/tomcat/restar_jslave.sh >> con_jenkins_crontab.log 2>&1 &

server cron start

 

在定时任务前加环境变量是因为

还是没有成功

解决方案可以有两种:

crontab命令本身是不带环境变量的,shell脚本是它执行一个文件,在里面写上只是在shell脚本里带上了环境变量,

终于在一个介绍crontab用法的博客终于找到我的crontab脚本不执行的原因了:没有设置环境变量!

  1. 定义好一些环境参数,并在crontab里面先source生效,再执行主程序脚本

  2. 直接把脚本中的环境变量改为绝对路径。

用crontab执行后的进程是由crontab发起的,所有得在crontab里加上环境变量才起作用

在crontab文件中定义多个调度任务时,需要特别注环境变量的设置,因为我们手动执行某个任务时,是在当前shell环境下进行的,程序当然能找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的,因此,就需要在crontab文件中指定任务运行所需的所有环境变量

crontab脚本

HOME=/
SHELL=/bin/bash
0 * * * * notify-send ["该休息一下啦"] "喝水!伸懒腰!动一动!"

这样就实现了

二、shell脚本无限循环实现

下面是脚本:

while :
do 
 sleep 3600
 echo time past
 notify-send ["该休息一下啦"] "喝水!伸懒腰!动一动!"
done

把这个脚本加入到home目录的.bashrc中,每次登陆就能启动了

三、利用zenity和notify-send实现

#!/bin/bash
alartTime=100
while (($alartTime))
do
if (($alartTime != 100)) # 如果不是 100,则说明不是初次运行,则弹出下面的提示
then
notify-send $alartTime"分钟已到,请重新设定!"
zenity --info --text "时间到,请重新设定!"
fi
alartTime=$(zenity --entry --title "定时提醒" --text "输入提醒时间(分钟, 将忽略小数)")
alartTime=${alartTime%.*} # 忽略输入的小数点后面的数字,如 4.6 识别为 4
if (($alartTime > 60)) # 不能超过最大值
then
zenity --info --text "必须小于60分钟,退出"
break
fi
notify-send "成功设定"$alartTime"分钟,开始计时"
sleep $((alartTime*60))
done

上面的脚本,使用了 notify-send 命令用于在桌面上弹出气泡提示,使用了 zenity 命令用于显示图形窗口。
自己用的话,上面的脚本可以写得更简单一点,因为错误检测没必要做。但是如果要给不太懂的人用的话,我这脚本里的错误检测及处理则会就显得有点力不从心了。

总结

好了,终于完成了ubuntu中弹窗提醒脚本了,本文提供三种方法供大家参考借鉴,不知道大家都学会了没有,希望这篇文章的内容对大家能有所帮助,如果有疑问大家可以留言交流。

您可能感兴趣的文章:

  • mysql自动化安装脚本(ubuntu and centos64)
  • ubuntu系统中nginx启动脚本
  • Shell脚本实现自动检测修改最快的Ubuntu软件源
  • Ubuntu、Linux Mint一键安装Chrome浏览器的Shell脚本分享
  • 用Shell脚本快速搭建Ubuntu下的Nodejs开发环境
  • 获取服务器信息的Shell脚本分享(ubuntu、centos测试通过)
  • Ubuntu下定时提交代码到SVN服务器的Shell脚本分享
  • Ubuntu Server下MySql数据库备份脚本代码
  • Ubuntu服务器配置apache2.4的限速功能shell脚本分享
  • Ubuntu 14.04设置开机启动脚本的方法

本文由澳门威斯尼人平台登录发布于 操作系统,转载请注明出处:crontab执行脚本异常问题,jenkins定时启动

相关阅读