UP | HOME

Systemd services and timers

Table of Contents

https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units

Pass Git

Service

[Unit]
Description=Sync Passwords every day
RefuseManualStart=no
RefuseManualStop=yes

[Service]
Type=oneshot
ExecStart=%h/scripts/pass_git_sync.sh

Timer

[Unit]
Description=Sync Passwords every day
RefuseManualStart=no
RefuseManualStop=no
Wants=network-online.target
After=network-online.target

[Timer]
OnCalendar=*-*-* 16:00:00
Persistent=true
Unit=passgit.service

[Install]
WantedBy=default.target

Script

pass git pull --rebase && pass git push

Buku Git

Service

[Unit]
Description=Sync Bookmarks every day
RefuseManualStart=no
RefuseManualStop=yes

[Service]
Type=oneshot
ExecStart=%h/scripts/buku_git_push.sh

Timer

[Unit]
Description=Sync All Mails every x hours
RefuseManualStart=no
RefuseManualStop=no
Wants=network-online.target
After=network-online.target

[Timer]
OnCalendar=*-*-* 16:00:00
Persistent=true
Unit=bukugit.service

[Install]
WantedBy=default.target

Script

cd ~/.local/share/buku/

if [[ ! -z $(git status -s bookmarks.db) ]]
then
    git add bookmarks.db
    git commit -m "Changed bookmarks - $(date +%F)"
    git push
    exit
fi

Check mail

Service

[Unit]
Description=Check new mails
RefuseManualStart=no
RefuseManualStop=yes

[Service]
Type=oneshot
ExecStart=%h/scripts/checkmail.sh -q

Timer

[Unit]
Description=Check Mail every x minutes
RefuseManualStart=no
RefuseManualStop=no
Wants=network-online.target
After=network-online.target
Requires=checkmail.service

[Timer]
Persistent=false
OnBootSec=2min
OnUnitActiveSec=5min
AccuracySec=2min
Unit=checkmail.service

[Install]
WantedBy=default.target

Script

while [ -n "$1" ]; do # while loop starts
    case "$1" in
    -a) opt_all='--all' ;; # Check All inboxes
    -v) opt_verbose='--verbose' ;; # Verbose
    -q) opt_quiet='--quiet' ;; # Quiet
    *) echo "Option $1 not recognized" ;; # In case you typed a different option
    esac
    shift
done


# =============================================================
# Count number of mails
gmail_old="$(ls ~/.mail/gmail/Inbox/new | wc -l)"
esrf_old="$(ls ~/.mail/esrf/Inbox/new | wc -l)"
ulg_old="$(ls ~/.mail/ulg/Inbox/new | wc -l)"
uliege_old="$(ls ~/.mail/uliege/Inbox/new | wc -l)"
# =============================================================

# =============================================================
# Retreive mails
mbsync $opt_all $opt_verbose gmail-Home esrf-Home ulg-Home uliege-Home
# =============================================================

# =============================================================
# Count number of mails
gmail_new="$(ls ~/.mail/gmail/Inbox/new | wc -l)"
esrf_new="$(ls ~/.mail/esrf/Inbox/new | wc -l)"
ulg_new="$(ls ~/.mail/ulg/Inbox/new | wc -l)"
uliege_new="$(ls ~/.mail/uliege/Inbox/new | wc -l)"
# =============================================================

# =============================================================
# Total Number of new mails since last checking
new="$(($gmail_new+$esrf_new+$ulg_new+$uliege_new))"
old="$(($gmail_old+$esrf_old+$ulg_old+$uliege_old))"
# =============================================================

# =============================================================
# Notification
if [ "$new" -gt 0 ]; then
    dunstify --replace=98465 'New mail' " $esrf_new$gmail_new$ulg_new$uliege_new"
fi
# =============================================================

# =============================================================
# Indexation and Tags
# mu update
mu index --maildir=~/.mail $opt_verbose $opt_quiet
# Update on Emacs
# if [ "$(($new-$old))" -gt 0 ]; then
#     emacsclient --eval '(mu4e-update-index)';
# fi
# =============================================================

Sync mail

Service

[Unit]
Description=Sync all mails
RefuseManualStart=no
RefuseManualStop=yes

[Service]
Type=oneshot
ExecStart=%h/scripts/checkmail.sh -a -q

Timer

[Unit]
Description=Sync All Mails every x hours
RefuseManualStart=no
RefuseManualStop=no
Wants=network-online.target
After=network-online.target
Requires=syncmail.service

[Timer]
Persistent=false
OnBootSec=30min
OnUnitActiveSec=300min
AccuracySec=10min
Unit=syncmail.service

[Install]
WantedBy=default.target

Vdirsyncer

Service

[Unit]
Description=Synchronize calendars and contacts
Documentation=https://vdirsyncer.readthedocs.org/
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/bin/vdirsyncer --verbosity "ERROR" sync
Type=oneshot

Timer

[Unit]
Description=Synchronize vdirs

[Timer]
OnBootSec=5m
OnUnitActiveSec=15m
AccuracySec=5m

[Install]
WantedBy=timers.target

SSH Agent

Service

[Unit]
Description=SSH key agent

[Service]
Type=simple
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK

[Install]
WantedBy=default.target

Powertop

Service

[Unit]
Description=Powertop tunings

[Service]
ExecStart=/usr/bin/powertop --auto-tune
RemainAfterExit=true

[Install]
WantedBy=multi-user.target

Mopidy

Service

[Unit]
Description=Mopidy music server
After=avahi-daemon.service
After=dbus.service
After=network.target
After=nss-lookup.target
After=pulseaudio.service
After=remote-fs.target
After=sound.target

[Service]
ExecStart=/usr/bin/mopidy --config ~/.config/mopidy/mopidy.conf

[Install]
WantedBy=multi-user.target

Author: Dehaeze Thomas

Created: 2020-03-01 dim. 22:50