我有一種情況,只有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用戶有權訪問我希望它執行的腳本的目錄以及運行該腳本的權限。
任何關於此教育將不勝感激!
我可以假設是'export -f restart'(而不是'export -f restartprocess')是你的貼子中的錯字,而不是你的實際代碼中的錯字?如果是這樣,請在上面的問題中更正。它也可能有助於包含'功能未找到'信息的確切文本。祝你好運。 – shellter
是的,謝謝!有任何想法嗎? – user1659007