How to change your VPS hostname and mailname on Ubuntu 16.04 LTS permanently

Today we want to set the host name of our VPS so that it still existed after a reboot. Some vendors reset the hostname after a reboot, so we bypass with a script that makes the adjustments for us.

First we have to create a file called set_vps_hostname.service in /etc/systemd/system/

sudo nano /etc/systemd/system/set_vps_hostname.service

content:

[Unit]
Description=Set my hostname on boot
Before=rsyslog.service

[Service]
Type=oneshot
ExecStart=/usr/local/bin/set_vps_hostname

[Install]
WantedBy=multi-user.target

Now we have to create the script set_vps_hostname (adjust the hostname to yours) :

sudo nano /usr/local/bin/set_vps_hostname

content:

#!/bin/bash
HOSTNAME=www.markus-blog.de # <---adjust hostname here
[ -f /etc/hostname ] && echo $HOSTNAME > /etc/hostname
[ -f /etc/HOSTNAME ] && echo $HOSTNAME > /etc/HOSTNAME
[ -f /etc/mailname ] && echo $HOSTNAME > /etc/mailname
[ -f /etc/sysconfig/network ] && sed -i.hebackup s/HOSTNAME=".*"/HOSTNAME="$HOSTNAME"/ /etc/sysconfig/network
/bin/hostname $HOSTNAME
[ -f /etc/my.resolv.conf ] && cp /etc/my.resolv.conf /etc/resolv.conf
[ -f /etc/my.hosts ] && cp /etc/my.hosts /etc/hosts
exit 0

Now we make the script executable:

sudo chmod +x /usr/local/bin/set_vps_hostname

Next we want to set the hostname in /etc/hosts file too:

sudo nano /etc/hosts

change the name to the hostname we need and copy the file to /etc/my.hosts to make it persistent:

sudo cp /etc/hosts /etc/my.hosts

if we use our own nameserver, we had to adjust the resolv.conf too:

sudo nano /etc/resolv.conf

and we copy the file to /etc/my.resolv.conf:

sudo cp /etc/resolv.conf /etc/my.resolv.conf

Now we have to enable our service and reboot to set the hostname with the following command (please be aware, this command will Reboot your VPS):

sudo systemctl daemon-reload && sudo systemctl enable set_vps_hostname.service && sudo systemctl start set_vps_hostname.service && sudo systemctl restart rsyslog && sudo reboot

after reboot we check the hostname with:

cat /etc/hostname
cat /etc/mailname

That’s it and have fun 🙂

8 Gedanken zu „How to change your VPS hostname and mailname on Ubuntu 16.04 LTS permanently

  1. Hallo Markus,
    ich wollte gerade auf meinem neuen vServer von Strato das Script nutzen (Jürgens letzte Version) jedoch ist nach einem Neustart der hostname wieder der alte.
    Hast du vielleicht eine Idee was angepasst werden muss? (Ich nutze Ubuntu 18.04 LTS)

  2. Hat das jemand erfolgreich auf einem strato vps server einsetzen können?
    Das Skript scheint an sich zu funktionieren: In /etc/hosts und /etc/hostname stehen nun die Werte die ich will. Aber ein Aufruf von „hostname“ in der shell zeigt immer noch h123123123.stratoserver.net an.
    Jemand eine Ahnung woran das liegt? Danke

  3. Hi Markus, mein Server läuft mittlerweile unter ubuntu 18.04 und Plesk Obsidian. Leider funktioniert jetzt Dein Skript nicht mehr.
    Das sind die Fehlermeldungen:
    set_vps_hostname.service – Set my hostname on boot
    Loaded: loaded (/etc/systemd/system/set_vps_hostname.service; enabled; vendor preset: enabled)
    Active: failed (Result: exit-code) since Wed 2019-10-16 14:33:11 CEST; 3s ago
    Process: 8493 ExecStart=/usr/local/bin/set_vps_hostname (code=exited, status=203/EXEC)
    Main PID: 8493 (code=exited, status=203/EXEC)

    Okt 16 14:33:11 h2828820.stratoserver.net systemd[1]: Starting Set my hostname on boot…
    Okt 16 14:33:11 h2828820.stratoserver.net systemd[8493]: set_vps_hostname.service: Failed to execute command: No such file or directory
    Okt 16 14:33:11 h2828820.stratoserver.net systemd[8493]: set_vps_hostname.service: Failed at step EXEC spawning /usr/local/bin/set_vps_hostname: No
    Okt 16 14:33:11 h2828820.stratoserver.net systemd[1]: set_vps_hostname.service: Main process exited, code=exited, status=203/EXEC
    Okt 16 14:33:11 h2828820.stratoserver.net systemd[1]: set_vps_hostname.service: Failed with result ‚exit-code‘.
    Okt 16 14:33:11 h2828820.stratoserver.net systemd[1]: Failed to start Set my hostname on boot.

    Weißt Du, was man hier ändern muss?

  4. Hallo Markus, nach einem Serverwechsel richte ich zur Zeit alles neu ein, u.a. auch Dein Skript um Plesk davon abzubringen, immer wieder nach einem reboot den „alten“ Servernamen zu verwenden. Bei meinem alten Server hat dies tadelos geklappt. Bei dem neuen Server steht leider nach einem reboot wieder der alte Name da,
    So sieht mein skript aus:
    #!/bin/bash
    HOSTNAME=www.kulturmensch.eu # /etc/hostname [ -f /etc/HOSTNAME ] && echo $HOSTNAME
    > /etc/HOSTNAME
    [ -f /etc/mailname ] && echo $HOSTNAME > /etc/mailname [ -f /etc/sysconfig/network ] && sed -i.hebackup s/HOSTNAME=“.*“/HOSTNAME=“$HOSTNAME“/
    /etc/sysconfig/network /bin/hostname $HOSTNAME [ -f /etc/my.resolv.conf ] && cp /etc/my.resolv.conf /etc/resolv.conf [ -f /etc/my.hosts ] && cp
    /etc/my.hosts /etc/hosts
    exit 0
    und so die service-datei:
    [Unit]
    Description=Set my hostname on boot
    Before=rsyslog.service

    [Service]
    Type=oneshot
    ExecStart=/usr/local/bin/set_vps_hostname

    [Install]
    WantedBy=multi-user.target
    Fällt Dir ein Fehler auf?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert