如何將使用者root切換到使用者到root以殺死父程序?
我正在開發一個複雜的自動化腳本,它將自動化我的大部分建構、安裝、部署和安裝後過程。問題是在所有需要發出的命令中,有一個要求使用者是 root。(這是一個要求約束,因為其他使用者(我們將呼叫 user1)不在 sudoers 列表中)
基本上我建構腳本的方式是,我有一個必須以 root 身份執行的起始腳本。此腳本將呼叫另外兩個腳本作為 user1。
所有三個腳本共享一個
sharedFunctions.sh
定義常用功能的腳本。在這個腳本中,我有一個run_command
函式需要在對這個問題不重要的其他參數中接受命令和失敗字元串。現在,如果失敗字元串出現在給定命令的輸出中,我想殺死停止整個火車的父程序。我有一個從根腳本中獲取的父 PID 的導出變數,但是如果腳本在執行兩個 user1 腳本中的任何一個時失敗,我無法終止該程序,因為它歸根所有。
有沒有一種方法可以在不需要憑據的情況下“退出”回 root(類似於您在終端中的方式),這樣我就可以殺死 root 擁有的 PID?
編輯
這是我的腳本需要遵循的非常簡化的過程,格式如下(必需的使用者:函式):
user1:maven install user1:scp jars to chef server root:chef command user1:chef command user1:post-installation scripts
我有三個腳本和一個源腳本
user1cmd1.sh
parentscript.sh
user1cmd2.sh
sharedFunctions.sh
第
parentscript.sh
一個通過使用它來提取 PID,export TOP_PID=$$
然後在該腳本完成時將 user1cmd1.sh 作為 user1 呼叫,它返回到父腳本並以 root 身份執行 chef 命令,然後將 user1cmd2.sh 作為 user1 呼叫my
run_command
中定義的sharedFunctions.sh
腳本類似於:run_command(){ cmd=$1 fail=$2 if $cmd | grep -q $fail;then kill $TOP_PID #there is more to this particular command, but I don't have it in front of me fi }
parentscript.sh
可以創建它傳遞到的收割機程序$TOP_PID
。reaper 程序將嘗試從可寫入 的命名管道user1
中讀取。如果沒有任何內容寫入管道,則收割者只會阻塞讀取並且不執行任何其他操作,但如果將任何內容寫入管道,則收割者的讀取完成並且收割者繼續其程式碼的其餘部分,從而終止頂部程序。