Sessão de tela iniciada a partir de rc.local não é visível na tela -ls sob raiz

1

No CentOS 7.

Eu editei /etc/rc.d/rc.local, e tornei-o executável, e estou começando uma sessão de tela a partir dele.

O problema é que quando eu logar ao servidor como root, eu não estou vendo sessões de tela iniciadas pelo rc.local, sob screen -ls executado como usuário root.

Se eu fizer ps axuf | grep -i screen , vejo sessões de tela ativas e posso ver processos dentro da tela sendo executados.

Como me conecto a essas sessões de tela?

Minha seção rc.local para tela é parecida com essa.

/usr/bin/screen -wipe
/usr/bin/screen -dmS scr1 /script/rsync1.sh
/usr/bin/screen -dmS scr2 /script/rsync2.sh
/usr/bin/screen -dmS scr3 /script/rsync3.sh
/usr/bin/screen -dmS scr4 /script/rsync4.sh
/usr/bin/screen -dmS scr5 /script/rsync5.sh

Eu posso ver que as sessões de tela são iniciadas com ps auxf após a inicialização do servidor.

root@server [~]# ps auxf | grep -i screen
root       90642  0.0  0.0 112648   988 pts/0    S+   21:54   0:00          \_ grep --color=auto -i screen
root        3384  0.0  0.0 127784  2212 ?        Ss   21:33   0:00 /usr/bin/SCREEN -dmS scr1 /script/rsync1.sh
root        3390  0.0  0.0 127784  2252 ?        Ss   21:33   0:00 /usr/bin/SCREEN -dmS scr2 /script/rsync2.sh    
root        3393  0.0  0.0 127784  2252 ?        Ss   21:33   0:00 /usr/bin/SCREEN -dmS scr3 /script/rsync3.sh
root        3398  0.0  0.0 127784  2252 ?        Ss   21:33   0:00 /usr/bin/SCREEN -dmS scr4 /script/rsync4.sh
root        3403  0.0  0.0 127784  2248 ?        Ss   21:33   0:01 /usr/bin/SCREEN -dmS scr5 /script/rsync5.sh

Se eu tentar fazer screen -r scr1 , verei que não existe tal tela em execução.

As sessões estão sendo executadas como root, por isso não sei por que não consigo visualizá-las.

Eu tentei adicionar o / usr / bin / sudo ao início dos comandos, mas ele não foi iniciado completamente.

Jul 10 22:07:37 server systemd[1]: Starting /etc/rc.d/rc.local Compatibility...
Jul 10 22:07:39 server rc.local[3645]: sudo: sorry, you must have a tty to run sudo
Jul 10 22:07:39 server rc.local[3645]: sudo: sorry, you must have a tty to run sudo
Jul 10 22:07:39 server rc.local[3645]: sudo: sorry, you must have a tty to run sudo
Jul 10 22:07:39 server rc.local[3645]: sudo: sorry, you must have a tty to run sudo
Jul 10 22:07:39 server rc.local[3645]: sudo: sorry, you must have a tty to run sudo
Jul 10 22:07:39 server systemd[1]: rc-local.service: control process exited, code=exited status=1
Jul 10 22:07:39 server systemd[1]: Failed to start /etc/rc.d/rc.local Compatibility.
Jul 10 22:07:39 server systemd[1]: Unit rc-local.service entered failed state.
Jul 10 22:07:39 server systemd[1]: rc-local.service failed.

Além disso, o screen -wipe no início não afeta as sessões que foram iniciadas manualmente fora de rc.local.

Caso o servidor trave, as telas que foram iniciadas manualmente ainda serão mostradas como inativas em screen -ls na raiz.

Eu adicionei isso ao rc.local, e não ao crontab com o @reboot, porque isso não funcionaria caso o sistema travasse ou fosse desligado / desligado sem reiniciar, ele só seria acionado na reinicialização, até onde eu entende @reboot no cron.

Resolvido por Stephen Harris, comente sobre $ SCREENDIR.

In your startup script do a screen -ls > /tmp/xyzzy.$$ (or similar filename) - that'll tell you what directory it has stored the sockets in. You may need to set $SCREENDIR to point to this directory in order to see the sessions when trying to re-attach. – Stephen Harris 10 hours ago

rc.local usou /var/run/screen/S-root como SCREENDIR

root usou /root/screens como SCREENDIR, por isso não viu sessões de rc.local

Nota:

Não é necessário adicionar a tela -ls > /tmp/xyzzy.$$ para rc.local para encontrar qual pasta é usada como SCREENDIR. Pode ser visto fazendo systemctl status rc-local , ele vai mostrar algo assim na saída

rc.local[3258]: No Sockets found in /var/run/screen/S-root.

Depois de fazer export SCREENDIR=/var/run/screen/S-root screen -ls mostra telas iniciadas de rc.local

    
por rAlen 11.07.2016 / 05:27

1 resposta

0

Resolvido por Stephen Harris, comente sobre $ SCREENDIR.

In your startup script do a screen -ls > /tmp/xyzzy.$$ (or similar filename) - that'll tell you what directory it has stored the sockets in. You may need to set $SCREENDIR to point to this directory in order to see the sessions when trying to re-attach. – Stephen Harris 10 hours ago

rc.local usou /var/run/screen/S-root como SCREENDIR

root usou /root/screens como SCREENDIR, por isso não viu sessões de rc.local

Nota:

Não é necessário adicionar a tela -ls > /tmp/xyzzy.$$ para rc.local para encontrar qual pasta é usada como SCREENDIR. Pode ser visto fazendo systemctl status rc-local , ele vai mostrar algo assim na saída

rc.local[3258]: No Sockets found in /var/run/screen/S-root.

Depois de fazer export SCREENDIR=/var/run/screen/S-root screen -ls mostra telas iniciadas de rc.local

    
por 11.07.2016 / 23:37

Tags