顯示具有 Linux 標籤的文章。 顯示所有文章
顯示具有 Linux 標籤的文章。 顯示所有文章

2009年5月8日 星期五

profile with multiple choice

有時候基於硬體資源上的限制,必須在同一台主機上使用同一帳號來建立不同的環境,以區隔出不同的需求。最常見的例子就是使用 oracle 帳號來建立兩個 / 多個不同的 database,例如 demo1 與 demo2。

通常使用 oracle 帳號登入系統時,只能載入一個預設的 ORACLE_SID 以及其他相對應的環境變數。如需要切換至另一個 database 時,則需另外執行 export ORACLE_SID=demo2 來改變環境變數。

倘若同一機器上有多個環境時,以上的作法不僅增加使用者的負擔,也容易混淆當前的設定。因此,建議的作法是在登入時,在 .profile / .bash_profile 設定登入環境選項,讓使用者可自由選擇所需的作業環境。

以下是 .profile 的簡單範例:
=================================================
echo "請選擇 1) 正式區 ( ORACLE_SID=demo1 ) "
echo " 2) HR區 ( ORACLE_SID=demo2 ) "
echo " 3) 測試區 ( ORACLE_SID=demo3 ) "
echo " *) nothing "
read ans;
case $ans in
1) ORACLE_SID=demo1;export ORACLE_SID
PS1='';export PS1;;
2) ORACLE_SID=demo2;export ORACLE_SID
PS1='';export PS1;;
3) ORACLE_SID=demo3;export ORACLE_SID
PS1='';export PS1;;
*) unset ORACLE_SID
PS1='';export PS1;;
esac
=================================================

當使用者登入時,會有 1、2、3 與 any key 四種選項,當選擇 1 或 2 或 3 時,即會載入該選項下的環境變數,並在 command line 顯示目前所在環境名稱與工作路徑。當選擇其他非 1、2、3 的選項時,則會使用 *) 選項下的環境變數。

若某些環境變數適合應用於所有的選項,則可直接置於 profile 的最上端。

2009年3月25日 星期三

umount device

相信很多人都遇過在linux下要umount某個device時發生"umount: /u01: device is busy" 的錯誤.這個訊息代表要被umount的device正被process使用/user占用中.

此問題通常可用採以下幾個解法:

* 執行 lsof |grep XXX (XXX為要umount的目錄名稱)找出目前佔用此device的ProcessID/user,剔除掉該PID或請user離開該目錄後進行正常umount.

* 執行 fuser -m /dev/sdd1 則更直接的列出佔用此device的PID,剔除掉該PID後進行正常umount.

* 執行 umount -f /dev/sdd1 強制umount

* 若以上指令都無法生效時,就只剩下 umount -l /dev/sdd1 這種暴力umount的指令可以用了.這個指令常用於Networked File System(NFS)的 mount device.

PS: 但正常的作法應該是先停掉nfs service之後就可以umount了.