Não é possível iniciar com êxito o comando em rc.local

3

Eu quero deixar o comando sslocal iniciar automaticamente então eu escrevo em /etc/rc.local

sudo sslocal -c /etc/ss.json -d start 
plank
exit 0

mas depois que eu reiniciar, sudo systemctl status rc-local mostra que

rc-local.service - /etc/rc.local Compatibility
   Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset: enabled)
  Drop-In: /lib/systemd/system/rc-local.service.d
           └─debian.conf
   Active: failed (Result: exit-code) since   2017-12-07 16:05:51 +08; 6min ago
  Process: 1155 ExecStart=/etc/rc.local start (code=exited, status=1/FAILURE)

December 07 16:05:46 lucas-CW65S rc.local[1155]: INFO: loading config from /etc/ss.json
December 07 16:05:50 lucas-CW65S rc.local[1155]: 2017-12-07 16:05:50 INFO     loading libcrypto from libcrypto.so.1.0.0
December 07 16:05:50 lucas-CW65S sudo[1158]: pam_unix(sudo:session): session closed for user root
December 07 16:05:51 lucas-CW65S rc.local[1155]: Failed to connect to Mir: Failed to connect to server socket: no file and directory
December 07 16:05:51 lucas-CW65S rc.local[1155]: Unable to init server: cannot connect : deny connect
December 07 16:05:51 lucas-CW65S rc.local[1155]: [WARN 16:05:51.155503] [Gtk] cannot open display:
December 07 16:05:51 lucas-CW65S systemd[1]: rc-local.service: Control process exited, code=exited status=1
December 07 16:05:51 lucas-CW65S systemd[1]: Failed to start /etc/rc.local Compatibility.
December 07 16:05:51 lucas-CW65S systemd[1]: rc-local.service: Unit entered failed state.
December 07 16:05:51 lucas-CW65S systemd[1]: rc-local.service: Failed with result 'exit-code'

o ponto chave pode ser sudo[1158]: pam_unix(sudo:session): session closed for user root e parece que precisa de senha sudo quando mudar para o status sudo, mas como posso inseri-lo no arquivo rc.local? ..

    
por LFBuildAMountain 07.12.2017 / 09:27

2 respostas

1

Você tem dois problemas aí.

  1. /etc/rc.local é executado como root, então você não precisa de sudo
  2. rc.local é um script, estes são sequenciais e cada comando bloqueia a execução. Execute seus comandos em segundo plano adicionando & no final.

Observe também que rc.local usa #!/bin/sh -e , o que significa que sairá de qualquer erro. Se você quiser que o script continue a execução mesmo se um dos comandos falhar, use o tipo de abordagem command arg1 arg2 || true .

    
por Sergiy Kolodyazhnyy 07.12.2017 / 09:54
1

Correção simples : remova a palavra "sudo" do seu script.

Razão : /etc/rc.local já é executado como root, portanto, você não precisa de sudo .

PS: Você não deve chamar sudo de um script de shell por qualquer motivo.

    
por Mukesh Sai Kumar 07.12.2017 / 11:50