Como posso fazer logout de usuários ao reinicializar / parar por ssh, mas para que sua .bash_history seja salva?

2

Quando eu reinicializo meu servidor por SSH, a sessão simplesmente pára em vez de me desconectar bem, para que eu possa continuar a usar o terminal atual. Eu tentei o seguinte para corrigir isso: link Mas então meu histórico não é salvo antes de reiniciar.

Existe uma maneira de logar todos os usuários (para que seu histórico bash seja salvo) antes de um comando reboot / halt? ou seja, salvar histórico de bash e sessões de usuário final antes de reinicializar / parar?

SO: Ubuntu Server 11.04

    
por KIAaze 22.05.2011 / 12:50

2 respostas

0

Eu encontrei uma solução:

Eu simplesmente precisava usar "killall -u" ao invés da "skill -KILL -u". :) Como indicado aqui: link , o comando "skill" parece ser obsoletos e outros como pkill e killall devem ser usados em seu lugar. pkill não fez o que eu quero, mas killall fez. :)

Então aqui está a solução completa:

1) Crie um script /etc/init.d/killusers contendo o seguinte:

#!/bin/bash
#
# chkconfig: 35 90 12
# description: Foo server
#

# Get function from functions library
#. /etc/init.d/functions
. /lib/lsb/init-functions

# Start the service FOO
start() {
        #initlog -c "echo -n Starting FOO server: "
        #who | cut -d " " -f1 | uniq | xargs killall -u
        #who | cut -d " " -f1 | uniq | xargs skill -KILL -u
        #success $"FOO server startup"
        echo "Do nothing"
}

# Restart the service FOO
stop() {
        #initlog -c "echo -n Stopping FOO server: "
        who | cut -d " " -f1 | uniq | xargs killall -u
        #who | cut -d " " -f1 | uniq | xargs skill -KILL -u
        #who | cut -d " " -f1 | uniq | xargs pkill -STOP -u
}

### main logic ###
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status FOO
        ;;
  restart|reload|condrestart)
        stop
        start
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|reload|status}"
        exit 1
esac

exit 0

(script baseado em link )

2) Torne-o executável:

sudo chmod +x /etc/init.d/killusers

3) Adicione aos scripts de desligamento:

sudo update-rc.d killusers defaults

Nota 1: Eu acho que o nível de execução 6 deve ser suficiente, mas eu fui para os padrões apenas para ter certeza. O script provavelmente também conteria apenas o comando kill se fosse executado durante o desligamento.

Nota 2: Para salvar o histórico bash imediatamente, você pode usar (graças ao HampusLi):

history -a

Você também pode simplesmente executar:

history -a && sudo reboot

Mas eu queria que funcionasse para qualquer usuário e sem precisar criar um alias, script ou similar.

    
por 25.05.2011 / 01:34
1

Você precisa executar algo como history -a em cada sessão de usuário. Eu não posso pensar em uma maneira "agradável" de fazer isso, mas usando PROMPT_COMMAND no bash iria funcionar, PROMPT_COMMAND é uma variável env para um comando que é executado sempre que bash retorna para um prompt, ou seja, ele automaticamente libera o histórico para .bash_history em cada comando execute. Funciona, mas provavelmente não é a melhor solução. Coloque isso no arquivo .bashrc ou em um profile.d (se você estiver em uma distribuição compatível com profile.d).

export PROMPT_COMMAND='history -a'
    
por 22.05.2011 / 12:54

Tags