2012-09-10 40 views
1

我有一種情況,只有root可以使用mailx,並且只有ops可以重新啓動進程。我想製作一個自動腳本,它既重新啓動過程,又發送一封關於這個過程的電子郵件。導出shell函數作爲用戶使用ksh默認shell

當我嘗試使用函數時,該函數是「未找到」。

我有這樣的事情:

#!/usr/bin/bash 

function restartprocess { 
/usr/bin/processcontrol.sh start 
} 

export -f restartprocess 

su - ops -c "restartprocess" 

mailx -s "process restarted" myemail.mydomain.com < emailmessage.txt 

exit 0 

它告訴我,該函數沒有被發現。經過一些故障排除後,發現操作系統用戶的默認shell是ksh。

我試着改變腳本在ksh中運行,並將「export -f」更改爲「typeset -xf」,但仍未找到函數。像: ksh:exportfunction找不到

我終於放棄了,只是調用腳本(這是在函數中直接),並工作。它是這樣的:

su - ops -c "/usr/bin/processcontrol.sh start" 

(這當然是對真實腳本的簡化)。

鑑於用戶操作系統有默認shell是ksh,我不能改變或修改sudoers,有沒有辦法導出一個功能,使我可以作爲操作系統(我需要運行操作系統的配置文件),並執行那功能?

我確保ops用戶有權訪問我希望它執行的腳本的目錄以及運行該腳本的權限。

任何關於此教育將不勝感激!

+1

我可以假設是'export -f restart'(而不是'export -f restartprocess')是你的貼子中的錯字,而不是你的實際代碼中的錯字?如果是這樣,請在上面的問題中更正。它也可能有助於包含'功能未找到'信息的確切文本。祝你好運。 – shellter

+0

是的,謝謝!有任何想法嗎? – user1659007

回答

0

導出功能有很多限制,特別是 加上su - ...不同的帳號和不同的shell。

取而代之,將腳本從裏面翻出來,並將的所有的命令 在調用shell中的函數內部運行。

喜歡的東西:(雙方慶典和ksh)

#!/usr/bin/bash 

function restartprocess { 
    /bin/su - ops -c "/usr/bin/processcontrol.sh start" 
} 

if restartprocess; then 
    mailx -s "process restarted" \ 
     [email protected] < emailmessage.txt 
fi 

exit 0  

這將隱藏所有restartprocess函數內部/bin/su處理,並可以隨意擴展。

+0

謝謝你。我會投票,但顯然我還沒有被允許這樣做。 – user1659007

+0

您應該仍然能夠接受答案(如您所問),或者如果不能,請提供有關如何改進的反饋。另外,嘗試花時間在其他一些stackexchange站點上,並完成您的配置文件。 –