Suas edições atuais em /etc/sudoers
permitem que user1
, user2
, user3
e reporter
executem qualquer ação como root
(já que executar su
permite que você se torne root
)! Você quase certamente não quer isso. E isso não ajuda em nada o seu problema atual, porque você não quer que esses usuários executem algo com uma identidade alternativa, você quer que root
execute algo com uma identidade alternativa. Antes de prosseguir, recomendo livrar-se dessas linhas de /etc/sudoers
(edite-as com visudo
, é claro), a menos que você tenha absoluta certeza de que é isso que deseja.
Se você é um usuário não com root
e executa isso, sempre será solicitada uma senha:
su reporter -c "cd /path/to/directorywithscript && bash runwebserver.sh >> /dev/null 2>&1&"
Mas quando root
executa isso, ele deve simplesmente ter sucesso (assumindo que funcionou antes no Oracle Enterprise Server e a única diferença relevante é que root
login está desativado no Ubuntu).
Quando você coloca essa linha em rc.local
, em qualquer distribuição GNU / Linux, incluindo o Ubuntu, ela é executada como root
. Deve apenas funcionar. Quando você executá-lo a partir da linha de comando, não funcionará. Mas em rc.local
, deve funcionar.
Se você quiser testá-lo a partir da linha de comando, atribua a você mesmo um root
do tipo semelhante ao ambiente de rc.local
:
sudo -i
(Isso simula um shell% login root
inicial. Normalmente, para um shell root
, use sudo -s
. E, claro, para executar um comando ...
com sudo
, use apenas sudo ...
. )
su -c
e sudo
têm uma sintaxe diferente, por isso, se você quiser usar esse comando usando sudo
em vez de su
, será necessário fazer outras alterações. A maneira mais fácil é provavelmente:
sudo -u reporter bash -c "cd /path/to/directorywithscript && ./runwebserver.sh >> /dev/null 2>&1&"
No entanto, enfatizo que você não precisa converter os comandos su
em sudo
para que eles sejam executados adequadamente em rc.local
.
No Ubuntu, ao contrário do Oracle Enterprise Server, o login como root
é desativado por padrão (e você quase certamente não deve ativá-lo). Mas su
ainda funciona quando é executado por root
. su
também funciona para um usuário que não seja root
, alterando a identidade para outro usuário que não seja root
.
Se você tem essa linha em rc.local
e não está funcionando, o motivo não são problemas de sudo
vs. su
. Nesse caso, algo está errado. Para que possamos solucionar o problema, você precisa fornecer o conteúdo de runwebserver.sh
.
Por fim, observe que bash runwebserver.sh >> /dev/null 2>&1&
é bastante deselegante. É mais simples de entender (e, muito menos importante, parece melhor) usar bash runwebserver.sh &>> /dev/null
. Você disse que isso é o último em rc.local
, então você não precisa usar &
para contextualizá-lo.
No entanto, você deve considerar se realmente deseja suprimir erro padrão , bem como saída padrão (como você está fazendo atualmente). Presumivelmente, se algo é escrito para erro padrão, então é importante ou pode ser suprimido, alterando as configurações de verbosidade do seu servidor web.