国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

可直接執行的腳本放到crontab中就不執行了

2019-11-06 06:07:45
字體:
來源:轉載
供稿:網友

iamlaosong文

前面文章曾提到過的定時檢測壓縮包并完成解壓、修改文件名和導入到數據庫的腳本(檢測壓縮包并處理的linux腳本(解壓、批量修改文件名、導入)),后來發現放到crontab中就無法執行了,費了很大勁,一步步找問題,首先是腳本肯定執行了,后來在腳本中增加一些其他命令如pwd、echo等都執行了,最后發現是導入程序沒有執行,其實也不是沒有執行,而是執行后退出來了。

下面是找問題的過程:

首先,crond服務未啟動,這個可以排除,因為還有其他定時任務在做,簡單測試一下就可以發現腳本執行了。

第二,權限問題,比如沒有執行權限,這個也不存在,因為直接執行是正常的。

第三、路徑問題,任務命令是絕對路徑,腳本中加了pwd語句顯示路徑是對的,再說直接執行也沒問題。

第四、時差問題,因為服務器與客戶端時差問題,所以crontab的時間以服務器時間為準,這個也沒問題。

第五、變量問題,有時候命令中含有變量,但crontab執行時卻沒有,也會造成執行失敗,這個也沒問題。

上面五點只是解決crontab不能正常執行的問題,現在是腳本執行了,只是關鍵的導入命令沒有執行,于是我想到了環境變量的問題,因為導入程序是需要和Oracle打交道的,需要很多環境變量,原以為定時任務是在oracle用戶下建立的,應該具有這個用戶的環境變量,其實不然,定時任務執行時根本沒有加載這些環境變量。

找到問題,解決也很簡單,只需將.bash_PRofile執行一下就行了。可以在當前腳本中執行,也可以在其調用的腳本jsimp.sh中執行。下面是部分腳本:

#import data beginning. /home/oracle/.bash_profilecd ${BINDIR}for dd in ${SYFDAT}do  ./jsimp.sh ${dd} SYFdonefor dd in ${BCFDAT}do  ./jsimp.sh ${dd} BCFdone#end import代碼中. /home/oracle/.bash_profile前面的點(注意后面有個空格)表示腳本在同一個shell中執行, 所調用的腳本中聲明的變量和環境變量都可以在主腳本中得到和使用。在Linux平臺上開發,經常會在一個shell腳本中(或者控制臺)調用另外一個shell腳本文件,在一個腳本中調用另外一個腳本有三種方法:

1、fork  ( /directory/script.sh)    fork是最普通的, 就是直接調用,即在腳本里面用/directory/script.sh來調用script.sh這個腳本。運行的時候開一個sub-shell執行調用的腳本,sub-shell執行的時候,parent-shell還在,sub-shell執行完畢后返回parent-shell。sub-shell從parent-shell繼承環境變量,但是sub-shell中的環境變量不會帶回parent-shell中。

2、exec (exec /directory/script.sh)    調用時腳本名稱前加上exec四個字符。exec與fork不同,不需要新開一個sub-shell來執行被調用的腳本,被調用的腳本與父腳本在同一個shell內執行。但是使用exec調用一個新腳本以后,父腳本中exec行之后的內容就不會再執行了。這是exec和source的區別。

3、source (source /directory/script.sh)    調用時前面加上source六個字符或者用一個“.”代替source。與fork的區別是不新開一個sub-shell來執行被調用的腳本,而是在同一個shell中執行。所以被調用的腳本中聲明的變量和環境變量都可以在主腳本中得到和使用。

簡單的說,fork相當于出國旅游了一趟,啥也沒帶回來;exec相當于直接出國定居了,再也不回來了;而source則是把外國的景點搬到國內,風景都留下來了。對應這三種方法,上面jsimp.sh腳本的調用寫法如下:

#fork./jsimp.sh#execexec ./jsimp.sh#source. ./jsimp.sh


上一篇:MATLAB中Size的用法

下一篇:編程提醒 ①

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北海市| 新郑市| 泉州市| 桑植县| 邛崃市| 北安市| 南充市| 土默特左旗| 舟曲县| 蓬莱市| 丹东市| 莱芜市| 蒲江县| 黄冈市| 华容县| 邵阳市| 鹤庆县| 克山县| 正镶白旗| 湘乡市| 嵊州市| 自贡市| 永宁县| 顺昌县| 成安县| 鄂州市| 武功县| 桦川县| 宁晋县| 阿鲁科尔沁旗| 泰兴市| 集贤县| 塘沽区| 大厂| 林甸县| 米易县| 澄江县| 河间市| 勃利县| 长海县| 迁西县|