Systemd: Difference between revisions

From Bitpost wiki
No edit summary
 
(12 intermediate revisions by the same user not shown)
Line 1: Line 1:
Systemd has done serious damage to networkmanager dns cron ntp...  We have to adapt to it, here we go.
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
=== Log limit ===
Prevent systemd from casually eating your entire drive with logs by clipping it, here:
$ sudo emacs /etc/systemd/journald.conf
[Journal]
# MBM do not let systemd logs fill drive                                                                                                                                                       
SystemMaxUse=200M
Then reload config:
sudo systemctl daemon-reload


=== NTP ===
=== NTP ===
Line 15: Line 38:
Use these in place of cron.  Each one typically does one task.
Use these in place of cron.  Each one typically does one task.


    systemd timer services
[https://www.certdepot.net/rhel7-use-systemd-timers/ systemd timer services]
    ----------------------
    https://www.certdepot.net/rhel7-use-systemd-timers/
   
   
    create a script to do the work:
create a script to do the work:
      echo "/usr/sbin/logrotate /etc/logrotate.conf" >/usr/local/sbin/logrotate.sh
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
   
   
    create a service file:
[Service]
      nano /usr/lib/systemd/system/logrotate.service
Type=simple
        [Unit]
ExecStart=/usr/local/sbin/logrotate.sh
        Description=Rotate logs
User=root
   
   
        [Service]
[Install]
        Type=simple
WantedBy=multi-user.target
        ExecStart=/usr/local/sbin/logrotate.sh
 
        User=root
create a timer file:
nano /usr/lib/systemd/system/logrotate.timer
[Unit]
Description=Rotate logs as needed every night at 2am
   
   
        [Install]
[Timer]
        WantedBy=multi-user.target
OnCalendar=*-*-* 02:00:00
Unit=logrotate.service
   
   
    create a timer file:
[Install]
      nano /usr/lib/systemd/system/logrotate.timer
WantedBy=multi-user.target
        [Unit]
        Description=Rotate logs as needed every night at 2am
   
   
        [Timer]
activate on boot:
        OnCalendar=*-*-* 02:00:00
# NOTE you must enable the service (even though not run directly), plus the timer
        Unit=logrotate.service
# then start the timer
systemctl enable logrotate       
        [Install]
systemctl enable logrotate.timer
        WantedBy=multi-user.target
systemctl start logrotate.timer
utils:
    activate on boot:
systemctl is-enabled ####.timer
      # NOTE you must enable the service (even though not run directly), plus the timer
systemctl is-active ####.timer  # to see if timer is active and enabled
      # then start the timer
systemctl start ####      # to run service immediately
      systemctl enable logrotate       
systemctl status ####    # nice status output
      systemctl enable logrotate.timer
systemctl daemon-reload  # to restart services after config changes
      systemctl start logrotate.timer
systemctl list-timers [####*]  # to list timers that start with #####
 
    utils:
=== Creating a custom managed service ===
      systemctl is-enabled ####.timer
 
      systemctl is-active ####.timer  # to see if timer is active and enabled
Let's get an official systemd service going!  This example is for rtorrent on bandit.
      systemctl start ####      # to run service immediately
 
      systemctl status ####    # nice status output
<pre>
      systemctl daemon-reload  # to restart services after config changes
emacs /etc/systemd/system/rtorrent.service
      systemctl list-timers [####*]  # to list timers that start with #####
------------
 
[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
</pre>

Latest revision as of 20:00, 7 November 2022

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

Log limit

Prevent systemd from casually eating your entire drive with logs by clipping it, here:

$ sudo emacs /etc/systemd/journald.conf 
[Journal]
# MBM do not let systemd logs fill drive                                                                                                                                                         
SystemMaxUse=200M

Then reload config:

sudo systemctl daemon-reload

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

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