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