很多時候我們會遇見這種情況,我們千辛萬苦寫了乙個指令碼,經過測試,一切正常,然後放到了crontab裡面執行,結果,不管怎麼配置,就是執行不正常。
結果發現環境問題,居然是這個異常的元凶。
我們先在我們的伺服器上執行env命令,出現如下:
1 xdg_vtnr=12 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
* * * * * env > /home/crontab.out
然後我們在/home/crontab.out檔案中,看看裡面的內容。令人奇怪的是,我們發現的裡面的資訊只有
1 xdg_session_id=32 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
我們先不討論原因,這裡,我們就可以看到為什麼很多指令碼在crontab中編輯後不可以執行了。因為crontab的任務環境就沒有定義那麼多的環境變數,我們在互動式的環境下寫的指令碼中用到了這些沒有的環境變數,當然可以通過,但是放到crontab下就不行了。
那麼這些環境變數居然差那麼多,為什麼呢?因為系統的cron deamon會自動設定可構成最小環境的環境變數。
解決方案可以有兩種:
1. 定義好一些環境引數,並在crontab裡面先source生效,再執行主程式指令碼
2. 直接把指令碼中的環境變數改為絕對路徑。
crontab執行指令碼出錯
最近經常碰到關於crontab不能執行的,初步總結了有以下幾個原因 第一,指令碼的原因 大多數情況下,是我們的指令碼的問題,這種問題導致crontab不能執行的概率佔到70 以上。因為程式執行到某一步導致crontab終止執行,如,資料庫訪問出錯等。第二,執行環境問題,當我們碰到第一情況下,一般都可...
crontab計畫執行指令碼詳解
crontab是linux系統中在固定時間執行某乙個程式的工具,類似於windows系統中的任務計畫程式。一 安裝crontab yum install vixie cron 安裝 chkconfig crond on 設為開機啟動,安裝chkconfig yum installchkconfig ...
crontab 執行指令碼注意的問題
bin bash filepath cd dirname 0 pwd filename excute pro cd pid ps ef grep filename grep v grep awk pidnum echo pid wc awk export ld library path lib us...