Systemd: Difference between revisions

From Bitpost wiki
Line 13: Line 13:
  dpkg-reconfigure resolvconf
  dpkg-reconfigure resolvconf
  service network-manager restart
  service network-manager restart
''TO KILL IT''
You should probably turn off systemd-resolved and manually configure /etc/resolv.conf, since systemd sucks the chrome off a donkey's ballbearings.
sudo systemctl disable systemd-resolved.service && sudo service systemd-resolved stop
# older: sudo systemctl disable systemd-resolved && sudo systemctl stop systemd-resolved
# IMPORTANT as it is a symlink to a systemd file that is out of our control:
sudo rm /etc/resolv.conf
sudo emacs -nw /etc/resolv.conf # use [nameserver 8.8.8.8] if you don't have anything better
# or typically it is already available:
sudo cp ~m/resolv.conf.goog /etc/resolv.conf


=== NTP ===
=== NTP ===

Revision as of 13:28, 3 April 2021

Systemd has done serious damage to networkmanager dns cron ntp... We have to adapt to it, here we go.

DNS

UPDATE: it is working now in Ubuntu 20.04 with my dnsmasq DHCP serving up my 192.168.22.1 nameserver, YAY.

Turn it back on:

sudo su -
rm -f /etc/resolv.conf
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
systemctl unmask systemd-resolved
systemctl enable systemd-resolved
dpkg-reconfigure resolvconf
service network-manager restart

NTP

DO NOT INSTALL ntp daemon any more, instead we now have systemd-timesyncd. That relies on systemd-networkd. Here's what I did on gold (which needed a specific ntp server)...

sudo apt remove ntp
emacs /etc/systemd/timesyncd.conf # if you need to hit a non-standard ntp server
systemctl status systemd-networkd systemd-timedated systemd-timesyncd
sudo timedatectl set-ntp on
sudo systemctl start systemd-networkd systemd-timedated systemd-timesyncd


Timers

Use these in place of cron. Each one typically does one task.

   systemd timer services
   ----------------------
   https://www.certdepot.net/rhel7-use-systemd-timers/

   create a script to do the work:
     echo "/usr/sbin/logrotate /etc/logrotate.conf" >/usr/local/sbin/logrotate.sh

   create a service file:
     nano /usr/lib/systemd/system/logrotate.service
       [Unit]
       Description=Rotate logs

       [Service]
       Type=simple
       ExecStart=/usr/local/sbin/logrotate.sh
       User=root

       [Install]
       WantedBy=multi-user.target

   create a timer file:
     nano /usr/lib/systemd/system/logrotate.timer
       [Unit]
       Description=Rotate logs as needed every night at 2am

       [Timer]
       OnCalendar=*-*-* 02:00:00
       Unit=logrotate.service

       [Install]
       WantedBy=multi-user.target

   activate on boot:
     # NOTE you must enable the service (even though not run directly), plus the timer
     # then start the timer
     systemctl enable logrotate       
     systemctl enable logrotate.timer
     systemctl start logrotate.timer

   utils:
     systemctl is-enabled ####.timer
     systemctl is-active ####.timer   # to see if timer is active and enabled
     systemctl start ####      # to run service immediately
     systemctl status ####     # nice status output
     systemctl daemon-reload   # to restart services after config changes
     systemctl list-timers [####*]  # to list timers that start with #####

Creating a custom managed service

Let's get an official systemd service going! This example is for rtorrent on bandit.

emacs /etc/systemd/system/rtorrent.service
------------

[Unit]
Description=rTorrent
After=network.target
[Service]
User=m
Type=forking
KillMode=none
ExecStart=/usr/bin/screen -d -m -fa -S rtorrent /usr/bin/rtorrent
ExecStop=/usr/bin/killall -w -s 2 /usr/bin/rtorrent
WorkingDirectory=/home/m/download/torrents/rtorrent
[Install]
WantedBy=default.target

--------------
systemctl enable rtorrent.service
systemctl start rtorrent