492 lines
11 KiB
Org Mode
492 lines
11 KiB
Org Mode
#+TITLE: Systemd services and timers
|
|
:DRAWER:
|
|
#+STARTUP: overview
|
|
|
|
#+LANGUAGE: en
|
|
#+EMAIL: dehaeze.thomas@gmail.com
|
|
#+AUTHOR: Dehaeze Thomas
|
|
|
|
#+HTML_LINK_HOME: ./index.html
|
|
#+HTML_LINK_UP: ./index.html
|
|
|
|
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
|
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
|
#+HTML_HEAD: <script type="text/javascript" src="./js/jquery.min.js"></script>
|
|
#+HTML_HEAD: <script type="text/javascript" src="./js/bootstrap.min.js"></script>
|
|
#+HTML_HEAD: <script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
|
|
#+HTML_HEAD: <script type="text/javascript" src="./js/readtheorg.js"></script>
|
|
:END:
|
|
|
|
https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units
|
|
|
|
* Pass Git
|
|
** Service
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/.config/systemd/user/passgit.service
|
|
:header-args+: :comments both :mkdirp yes
|
|
:END:
|
|
|
|
#+BEGIN_SRC conf
|
|
[Unit]
|
|
Description=Sync Passwords every day
|
|
RefuseManualStart=no
|
|
RefuseManualStop=yes
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
ExecStart=%h/scripts/pass_git_sync.sh
|
|
#+END_SRC
|
|
|
|
** Timer
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/.config/systemd/user/passgit.timer
|
|
:header-args+: :comments both :mkdirp yes
|
|
:END:
|
|
|
|
#+BEGIN_SRC conf
|
|
[Unit]
|
|
Description=Sync Passwords every day
|
|
RefuseManualStart=no
|
|
RefuseManualStop=no
|
|
Wants=network-online.target
|
|
After=network.target network-online.target dbus.socket
|
|
|
|
[Timer]
|
|
OnCalendar=*-*-* 17:00:00
|
|
Persistent=true
|
|
Unit=passgit.service
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
#+END_SRC
|
|
|
|
** Script
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/scripts/pass_git_sync.sh
|
|
:header-args+: :comments both :mkdirp yes
|
|
:header-args+: :shebang "#!/usr/bin/env bash"
|
|
:END:
|
|
|
|
#+begin_src bash
|
|
pass git pull --rebase && pass git push
|
|
#+end_src
|
|
|
|
* Buku Git
|
|
** Service
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/.config/systemd/user/bukugit.service
|
|
:header-args+: :comments both :mkdirp yes
|
|
:END:
|
|
|
|
#+BEGIN_SRC conf
|
|
[Unit]
|
|
Description=Sync Bookmarks every day
|
|
RefuseManualStart=no
|
|
RefuseManualStop=yes
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
ExecStart=%h/scripts/buku_git_push.sh
|
|
#+END_SRC
|
|
|
|
** Timer
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/.config/systemd/user/bukugit.timer
|
|
:header-args+: :comments both :mkdirp yes
|
|
:END:
|
|
|
|
#+BEGIN_SRC conf
|
|
[Unit]
|
|
Description=Sync All Mails every x hours
|
|
RefuseManualStart=no
|
|
RefuseManualStop=no
|
|
Wants=network-online.target
|
|
After=network.target network-online.target dbus.socket
|
|
|
|
[Timer]
|
|
OnCalendar=*-*-* 16:00:00
|
|
Persistent=true
|
|
Unit=bukugit.service
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
#+END_SRC
|
|
|
|
** Script
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/scripts/buku_git_push.sh
|
|
:header-args+: :comments both :mkdirp yes
|
|
:header-args+: :shebang "#!/usr/bin/env bash"
|
|
:END:
|
|
|
|
#+begin_src bash
|
|
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
|
|
#+end_src
|
|
|
|
* Check mail
|
|
** Service
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/.config/systemd/user/checkmail.service
|
|
:header-args+: :comments both :mkdirp yes
|
|
:END:
|
|
|
|
#+BEGIN_SRC conf
|
|
[Unit]
|
|
Description=Check new mails
|
|
RefuseManualStart=no
|
|
RefuseManualStop=yes
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
ExecStart=%h/scripts/checkmail.sh -q -v
|
|
#+END_SRC
|
|
|
|
** Timer
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/.config/systemd/user/checkmail.timer
|
|
:header-args+: :comments both :mkdirp yes
|
|
:END:
|
|
|
|
#+BEGIN_SRC conf
|
|
[Unit]
|
|
Description=Check Mail every x minutes
|
|
RefuseManualStart=no
|
|
RefuseManualStop=no
|
|
Wants=network-online.target
|
|
After=network.target network-online.target dbus.socket
|
|
Requires=checkmail.service
|
|
|
|
[Timer]
|
|
Persistent=false
|
|
OnBootSec=2min
|
|
OnUnitActiveSec=5min
|
|
AccuracySec=10s
|
|
Unit=checkmail.service
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
#+END_SRC
|
|
|
|
** Script
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/scripts/checkmail.sh
|
|
:header-args+: :comments both :mkdirp yes
|
|
:header-args+: :shebang "#!/usr/bin/env bash"
|
|
:END:
|
|
|
|
#+begin_src bash
|
|
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
|
|
# =============================================================
|
|
#+end_src
|
|
|
|
* Sync mail
|
|
** Service
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/.config/systemd/user/syncmail.service
|
|
:header-args+: :comments both :mkdirp yes
|
|
:END:
|
|
|
|
#+BEGIN_SRC conf
|
|
[Unit]
|
|
Description=Sync all mails
|
|
RefuseManualStart=no
|
|
RefuseManualStop=yes
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
ExecStart=%h/scripts/checkmail.sh -a -q -v
|
|
#+END_SRC
|
|
|
|
** Timer
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/.config/systemd/user/syncmail.timer
|
|
:header-args+: :comments both :mkdirp yes
|
|
:END:
|
|
|
|
#+BEGIN_SRC conf
|
|
[Unit]
|
|
Description=Sync All Mails every x hours
|
|
RefuseManualStart=no
|
|
RefuseManualStop=no
|
|
Wants=network-online.target
|
|
After=network.target network-online.target dbus.socket
|
|
Requires=syncmail.service
|
|
|
|
[Timer]
|
|
Persistent=false
|
|
OnBootSec=30min
|
|
OnUnitActiveSec=300min
|
|
AccuracySec=10s
|
|
Unit=syncmail.service
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
#+END_SRC
|
|
|
|
* Emacs
|
|
** Service
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/.config/systemd/user/emacs.service
|
|
:header-args+: :comments both :mkdirp yes
|
|
:END:
|
|
|
|
#+BEGIN_SRC conf
|
|
[Unit]
|
|
Description=Emacs text editor
|
|
Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/
|
|
|
|
[Service]
|
|
Type=forking
|
|
ExecStart=/usr/bin/emacs --daemon
|
|
ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)"
|
|
Environment=SSH_AUTH_SOCK=%t/keyring/ssh
|
|
Restart=on-failure
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
#+END_SRC
|
|
|
|
* Vdirsyncer
|
|
** Service
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/.config/systemd/user/vdirsyncer.service
|
|
:header-args+: :comments both :mkdirp yes
|
|
:END:
|
|
|
|
#+begin_src conf
|
|
[Unit]
|
|
Description=Synchronize calendars and contacts
|
|
Documentation=https://vdirsyncer.readthedocs.org/
|
|
Wants=network-online.target
|
|
After=network.target network-online.target
|
|
|
|
[Service]
|
|
ExecStart=/usr/bin/vdirsyncer sync
|
|
Type=oneshot
|
|
#+end_src
|
|
|
|
** Timer
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/.config/systemd/user/vdirsyncer.timer
|
|
:header-args+: :comments both :mkdirp yes
|
|
:END:
|
|
|
|
#+begin_src conf
|
|
[Unit]
|
|
Description=Synchronize vdirs
|
|
|
|
[Timer]
|
|
OnBootSec=5m
|
|
OnUnitActiveSec=15m
|
|
AccuracySec=5m
|
|
|
|
[Install]
|
|
WantedBy=timers.target
|
|
#+end_src
|
|
|
|
* Weechat
|
|
** Service
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/.config/systemd/user/weechat.service
|
|
:header-args+: :comments both :mkdirp yes
|
|
:END:
|
|
#+begin_src conf
|
|
[Unit]
|
|
Description=A WeeChat client and relay service using Tmux
|
|
Wants=network-online.target
|
|
After=network.target network-online.target
|
|
|
|
[Service]
|
|
Type=forking
|
|
ExecStart=/usr/bin/tmux -L weechat new -d -s weechat weechat
|
|
ExecStop=/usr/bin/tmux -L weechat kill-session -t weechat
|
|
Restart=always
|
|
RestartSec=3
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
#+end_src
|
|
|
|
* Neomutt
|
|
** Service
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/.config/systemd/user/neomutt.service
|
|
:header-args+: :comments both :mkdirp yes
|
|
:END:
|
|
#+begin_src conf
|
|
[Unit]
|
|
Description=Neomutt - mail client
|
|
|
|
[Service]
|
|
Type=forking
|
|
ExecStart=/usr/bin/tmux -L neomutt new -d -s neomutt neomutt
|
|
ExecStop=/usr/bin/tmux -L neomutt kill-session -t neomutt
|
|
Restart=always
|
|
RestartSec=3
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
#+end_src
|
|
|
|
* Powertop
|
|
** Service
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/.config/systemd/user/powertop.service
|
|
:header-args+: :comments both :mkdirp yes
|
|
:END:
|
|
#+begin_src conf
|
|
[Unit]
|
|
Description=Powertop tunings
|
|
|
|
[Service]
|
|
ExecStart=/usr/bin/powertop --auto-tune
|
|
RemainAfterExit=true
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
#+end_src
|
|
* NCMPCPP
|
|
** Service
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/.config/systemd/user/ncmpcpp.service
|
|
:header-args+: :comments both :mkdirp yes
|
|
:END:
|
|
|
|
#+begin_src conf
|
|
[Unit]
|
|
Description=Ncmpcpp - Music Player
|
|
|
|
[Service]
|
|
Type=forking
|
|
ExecStart=/usr/bin/tmux -L ncmpcpp new -d -s ncmpcpp ncmpcpp
|
|
ExecStop=/usr/bin/tmux -L ncmpcpp kill-session -t ncmpcpp
|
|
Restart=always
|
|
RestartSec=3
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
#+end_src
|
|
|
|
* Newsboat
|
|
** Service - tmux
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/.config/systemd/user/newsboat.service
|
|
:header-args+: :comments both :mkdirp yes
|
|
:END:
|
|
|
|
#+begin_src conf
|
|
[Unit]
|
|
Description=Newsboat - RSS reader
|
|
|
|
[Service]
|
|
Type=forking
|
|
ExecStart=/usr/bin/tmux -L newsboat new -d -s newsboat newsboat
|
|
ExecStop=/usr/bin/tmux -L newsboat kill-session -t newsboat
|
|
Restart=always
|
|
RestartSec=3
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
#+end_src
|
|
* SSH Agent
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/.config/systemd/user/ssh-agent.service
|
|
:header-args+: :comments both :mkdirp yes
|
|
:END:
|
|
|
|
#+begin_src conf
|
|
[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
|
|
#+end_src
|
|
* Mopidy
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/.config/systemd/user/mopidy.service
|
|
:header-args+: :comments both :mkdirp yes
|
|
:END:
|
|
|
|
#+begin_src conf
|
|
[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
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
#+end_src
|