【案例分享】crontab执行脚本异常问题
很多時(shí)候我們會(huì)遇見(jiàn)這種情況,我們千辛萬(wàn)苦寫(xiě)了一個(gè)腳本,經(jīng)過(guò)測(cè)試,一切正常,然后放到了crontab里面執(zhí)行,結(jié)果,不管怎么配置,就是執(zhí)行不正常。
結(jié)果發(fā)現(xiàn)環(huán)境問(wèn)題,居然是這個(gè)異常的元兇。
我們先在我們的服務(wù)器上執(zhí)行env命令,出現(xiàn)如下:
XDG_VTNR=1
XDG_SESSION_ID=1
HOSTNAME=bogon
IMSETTINGS_INTEGRATE_DESKTOP=yes
GPG_AGENT_INFO=/run/user/0/keyring/gpg:0:1
VTE_VERSION=3802
TERM=xterm
SHELL=/bin/bash
XDG_MENU_PREFIX=gnome-
HISTSIZE=1000
GJS_DEBUG_OUTPUT=stderr
WINDOWID=37748743
GJS_DEBUG_TOPICS=JS ERROR;JS LOG
IMSETTINGS_MODULE=IBus
QT_GRAPHICSSYSTEM_CHECKED=1
USER=root
SSH_AUTH_SOCK=/run/user/0/keyring/ssh
USERNAME=root
SESSION_MANAGER=local/unix:@/tmp/.ICE-unix/1672,unix/unix:/tmp/.ICE-unix/1672
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-8
GDM_LANG=zh_CN.UTF-8
KDEDIRS=/usr
GDMSESSION=gnome
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
HISTCONTROL=ignoredups
HOME=/root
XDG_SEAT=seat0
SHLVL=2
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=1
XDG_RUNTIME_DIR=/run/user/0
DISPLAY=:0
XDG_CURRENT_DESKTOP=GNOME
XAUTHORITY=/run/gdm/auth-for-root-A4DlSi/database
_=/usr/bin/env
然后我們編輯一個(gè)crontab,如下:
* * * * * env > /home/crontab.out
然后我們?cè)?home/crontab.out文件中,看看里面的內(nèi)容。令人奇怪的是,我們發(fā)現(xiàn)的里面的信息只有
XDG_SESSION_ID=3
SHELL=/bin/sh
USER=root
PATH=/usr/bin:/bin
PWD=/root
LANG=zh_CN.UTF-8
SHLVL=1
HOME=/root
LOGNAME=root
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/env
我們先不討論原因,這里,我們就可以看到為什么很多腳本在crontab中編輯后不可以運(yùn)行了。因?yàn)閏rontab的任務(wù)環(huán)境就沒(méi)有定義那么多的環(huán)境變量,我們?cè)诮换ナ降沫h(huán)境下寫(xiě)的腳本中用到了這些沒(méi)有的環(huán)境變量,當(dāng)然可以通過(guò),但是放到crontab下就不行了。
那么這些環(huán)境變量居然差那么多,為什么呢?因?yàn)橄到y(tǒng)的cron deamon會(huì)自動(dòng)設(shè)置可構(gòu)成最小環(huán)境的環(huán)境變量。
解決方案可以有兩種:
1. 定義好一些環(huán)境參數(shù),并在crontab里面先source生效,再執(zhí)行主程序腳本
2. 直接把腳本中的環(huán)境變量改為絕對(duì)路徑。
公眾號(hào)-智能化IT系統(tǒng)。每周都有技術(shù)文章推送,包括原創(chuàng)技術(shù)干貨,以及技術(shù)工作的心得分享。掃描下方關(guān)注。
總結(jié)
以上是生活随笔為你收集整理的【案例分享】crontab执行脚本异常问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【团队管理】改造团队成员?
- 下一篇: 通过Erlang构建TCP服务器