Estou desenvolvendo um script de automação complicado que automatizará uma grande parte dos processos de criação, instalação, implantação e pós-instalação. O problema é que dentro de todos os comandos que precisam ser emitidos, existe um que requer que o usuário seja root. (Essa é uma restrição de requisito, pois é necessário que o outro usuário (nós chamaremos user1) não esteja na lista de sudoers)
Basicamente, como estou estruturando meus scripts, tenho um script inicial que deve ser executado como root. Esse script chamará dois outros scripts como user1.
Todos os três scripts compartilham um script sharedFunctions.sh
que define funções comuns. Dentro deste script eu tenho uma função run_command
que precisa tomar um comando e uma string de falha entre outros argumentos que não são importantes para este problema.
Agora, se a string de falha aparecer na saída do comando especificado, eu quero matar o processo pai parando o trem inteiro. Eu tenho uma variável exportada do PID pai que eu pego do script raiz, mas se o script falhar enquanto estiver executando um dos dois scripts user1, não posso matar esse processo porque ele é de propriedade do root.
Existe uma maneira de "sair" de volta à raiz sem precisar de credenciais (semelhante a como você pode no terminal) para que eu possa matar o PID de propriedade do root?
***** EDIT *****
Este é o processo muito simplificado que meu script precisa seguir formatado como tal (user user: function):
user1:maven install
user1:scp jars to chef server
root:chef command
user1:chef command
user1:post-installation scripts
Eu tenho três scripts e um script de origem
user1cmd1.sh
%código%
%código%
parentscript.sh
o user1cmd2.sh
primeiro extrai o PID usando sharedFunctions.sh
Em seguida, chama user1cmd1.sh como user1
quando esse script termina, ele retorna ao parentcript e como root o comando chef é executado
Em seguida, chama user1cmd2.sh como user1
my parentscript.sh
, que é definido em export TOP_PID=$$
, tem um script semelhante a este:
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
}