Precisa forçar a atualização do nome do host sem reiniciar

2

Eu preciso alterar o nome do host de um sistema sem reinicializá-lo. Estou rodando o CentOS 7 e tenho o nome do host correto no arquivo / etc / hostname, mas ainda estou mostrando o nome do host antigo no prompt. Eu sei que quando eu reiniciar o sistema, ele irá verificar o arquivo de nome de host e aplicá-lo, mas existe alguma maneira para eu atualizar isso sem reiniciar? Aqui estão algumas informações da linha de comando:

[root@gandalf sysconfig]# cat network
NETWORKING=yes
GATEWAY=192.168.80.1
HOSTNAME="sauron.domain.com"
[root@gandalf sysconfig]# cd ..
[root@gandalf etc]# cat hostname
sauron
[root@gandalf etc]# 

Im não é possível reinicializar este servidor tão cedo e alguns membros da minha equipe estão misturando o servidor devido ao nome do host que mostra um nome de sistema mais antigo. Basta colocar: precisa solicitar para mostrar [user@sauron dir]# em vez de [user@gandalf dir]# .

O Google procurou por isso, mas não conseguiu ver uma maneira de fazer isso sem a reinicialização. Obrigado pela sua consideração!

    
por saleetzo 20.06.2017 / 20:37

4 respostas

2

Você deve conseguir fazer isso usando o comando hostname :

hostname -F /etc/hostname

Após essa alteração, o nome do host anterior ainda será exibido no seu prompt atual. Para ver a alteração sem reinicializar, insira um novo shell. Se você estiver usando bash , digite:

bash

Seu novo hostname agora deve ser exibido.

    
por 20.06.2017 / 20:53
0

O reinício do serviço de rede não é necessário. Você pode seguir qualquer um dos procedimentos abaixo.

hostnamectl set-hostname "new.host.name"

Efetue logout e login no sistema

OR

hostname "new.host.name"

Efetue logout e faça login no sistema

OR

echo "new.host.name" > /proc/sys/kernel/hostname

Efetue logout e login no sistema

Mas certifique-se de que HOSTNAME esteja definido no arquivo /etc/sysconfig/network , caso contrário não será possível atribuir o nome do host durante a reinicialização do sistema.

    
por 20.06.2017 / 20:58
0

Com hostname (busybox & GNU) e editando o nome do host desejado em /etc/hostname :

hostname -F /etc/hostname
    
por 20.06.2017 / 21:08
0

Isso acontece porque HOSTNAME mostrado em seu caminho é algo que não é tratado diretamente pelo comando hostname nem reflete um estado real do que está dentro de /etc/hostname . É uma variável que é configurada quando você faz login por /etc/profile . Dê uma olhada em um pequeno pedaço deste arquivo:

HOSTNAME='/bin/hostname 2>/dev/null'
HISTSIZE=1000
if [ "$HISTCONTROL" = "ignorespace" ] ; then
    export HISTCONTROL=ignoreboth
else
    export HISTCONTROL=ignoredups
fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

Veja a seguinte linha:

HOSTNAME='/bin/hostname 2>/dev/null'

Isto é o que "captura" o nome do host atual a ser usado pelo prompt do shell, e é por isso que todos os usuários conectados a esse host terão que efetuar logout e login novamente. Mas isso é apenas parte de como isso funciona. Você terá que olhar para o arquivo de login do shell específico (bash geralmente usa /etc/bashrc ) e você verá onde a variável de prompt PS1 é montada:

# System wide functions and aliases
# Environment stuff goes in /etc/profile

# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

# are we an interactive shell?
if [ "$PS1" ]; then
  if [ -z "$PROMPT_COMMAND" ]; then
    case $TERM in
    xterm*)
        if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
            PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
        else
            PROMPT_COMMAND='printf "3]0;%s@%s:%s
# wall "Hostname changed. Please logout and login again to have your prompt information updated" 
7" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"' fi ;; screen) if [ -e /etc/sysconfig/bash-prompt-screen ]; then PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen else PROMPT_COMMAND='printf "3]0;%s@%s:%s3\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"' fi ;; *) [ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=/etc/sysconfig/bash-prompt-default ;; esac fi
A variável

HOSTNAME que foi exportada em /etc/profile é usada aqui :). Dê uma olhada em bash(1) , INVOCATION seção.

Não há uma resposta simples para a sua pergunta, mas o que eu posso sugerir é: use o comando wall para informar a todos a mudança:

HOSTNAME='/bin/hostname 2>/dev/null'
HISTSIZE=1000
if [ "$HISTCONTROL" = "ignorespace" ] ; then
    export HISTCONTROL=ignoreboth
else
    export HISTCONTROL=ignoredups
fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
    
por 20.06.2017 / 21:46