crontab啟動shell指令碼的環境變數問題

2021-10-05 09:30:50 字數 1067 閱讀 9600

問題描述:crontab中啟動的shell指令碼不能正

常執行,但是使用手動執行沒有問題,在$home/.pr

ofile中設定了指令碼所需要的環境變數。

cron命令的預設shell是/bin/sh,

如果要在cron啟動的指令碼中使用

ksh,就必須在指令碼中的第一行新增「!/bin/sh」的宣告。

如果cron程序啟動的shell指令碼設定了使用者登入時的環境變數,就必須在cron啟動的shell指令碼中添

加下面的內容,才能夠在啟動的指令碼中使用$home/.profile檔案

中的環境

變數。在shell中載入乙個檔案可以用.和source兩種方

式,即. $home/.profile(使用者環境

變數) 或者 source /etc/profile(系統環境變數)

這是因為cron程序執行的shell指令碼是不會自動載入使用者目錄下的.profile檔案,所以需要指令碼自己載入所需要的環境變數。

crontab環境變數的問題:

crontab是進行例行性工作常用的命令,比如系統備份,編寫乙個備份的shell指令碼後,使用crontab定時執行這個備份指令碼,就可實現自動備份了。將備份時間設定在三更半夜系統訪問量小的時候,既不會影響系統日常使用,也不用派人盯著,第二天看一下郵件,檢查一下執行結果就好了。這裡就不描述如何使用crontab了,這些資料網上一大把,下面將我使用crontab曾經犯過的幾個錯誤和大家分享一下

1.使用普通變數

crontab執行shell時只能識別為數不多的系統環境變數,普通變數是無法識別的,如果在編寫的指令碼中需要使用變數,需要使用export將變數宣告為環境變數,指令碼才能正常執行。

2.使用相對路徑

crontab執行shell時,是不會進入到shell指令碼所在的路徑下執行的,如果shell裡含有相對路徑的話,會找不到路徑的,因此shell指令碼中都要使用絕對路徑。

3.許可權設定錯誤

許可權問題永遠是linux需要注意的問題,一定要確保crontab的執行者(/etc/crontab文件設定的第二項)有訪問shell指令碼所在目錄並且執行此shell的許可權(可使用chomd和chown修改許可權和所有者)。

Linux Makefile與shell指令碼區別

在makefile可以呼叫shell指令碼,但是makefile和shell指令碼是不同的。本文試著歸納一下makefile和shell指令碼的不同。1 shell中所有引用以 打頭的變數其後要加 而在makefile中的變數是以 打頭的後加 例項如下 makefile path data subp...

Linux下開機自啟動自定義shell指令碼

一 ubuntu下 1 方法一,編輯rc.loacl指令碼 ubuntu開機之後會執行 etc rc.local檔案中的指令碼,所以我們可以直接在 etc rc.local中新增啟動指令碼。進入到 etc rc5.d下,發現s99rc.local,即開機軟鏈結啟動順序99,在方法二設定開啟的之後 當...

Linux下開機自啟動自定義shell指令碼

1 方法一,編輯rc.loacl指令碼 ubuntu開機之後會執行 etc rc.local檔案中的指令碼,所以我們可以直接在 etc rc.local中新增啟動指令碼。進入到 etc rc5.d下,發現s99rc.local,即開機軟鏈結啟動順序99,在方法二設定開啟的之後 當然要新增到語句 ex...