Blame
|
1 | # SYSTEMD |
||||||
| 2 | SYSTEM Daemon |
|||||||
| 3 | Starts and monitors system and user services. |
|||||||
| 4 | ||||||||
| 5 | ## Overview |
|||||||
| 6 | | Command | Description | |
|||||||
| 7 | | - | - | |
|||||||
| 8 | | `systemctl status <serivename>.service` | Status of service (active, inactive, enabled, disabled, ...) | |
|||||||
| 9 | | `systemctl list-timers <servicename>.timer` | Status of service timer (time since last run, next planned start, ...) | |
|||||||
| 10 | | `/etc/systemd/system/` | Directory of self created services | |
|||||||
| 11 | ||||||||
| 12 | ## Create timed service |
|||||||
| 13 | ||||||||
| 14 | 1. Create service entry |
|||||||
| 15 | ```bash |
|||||||
| 16 | sudo nano /etc/systemd/system/<servicename>.service |
|||||||
| 17 | ``` |
|||||||
| 18 | ||||||||
|
19 | ```bash |
||||||
|
20 | [Unit] |
||||||
| 21 | Description=<what the service / called script does> |
|||||||
|
22 | # Wants=network-online.target |
||||||
| 23 | # After=network-online.target |
|||||||
|
24 | |||||||
| 25 | [Service] |
|||||||
| 26 | Type=oneshot|simple |
|||||||
|
27 | # RemainAfterExit=no |
||||||
|
28 | User=<user for script> |
||||||
| 29 | Group=<group of files?> |
|||||||
|
30 | UMask=0002 |
||||||
|
31 | Environment=HOME=<home directory> |
||||||
|
32 | ExecStart=<script with absolute path> |
||||||
| 33 | # ExecStart=/usr/bin/flock --nonblock /tmp/<lock filename>.lock <script with absolute path> |
|||||||
| 34 | # ExecStop= |
|||||||
|
35 | |||||||
|
36 | # [Install] |
||||||
| 37 | # WantedBy=multi-user.target|timers.target |
|||||||
|
38 | ``` |
||||||
| 39 | - wants/after network-online.target mean that this service needs the network to be online |
|||||||
| 40 | - Type `oneshot` is for short running tasks like backup scripts, `simple` for permanently running things like server and databases |
|||||||
| 41 | - additional line `RemainAfterExit=yes` would be for things like `mount` which result is *active* even if the service has exited - then also an additional lne for `ExecStop` would be necessary to `unmount` the service |
|||||||
|
42 | - UMask means rights that are removed from created files (0002 - remove write rights for other) |
||||||
|
43 | - Environment could also be directory of python (inside a virtual environment) |
||||||
|
44 | - flock create lock file to prevent different backups running in parallel |
||||||
| 45 | - nonblock means, that additional starts doesn't wait but stop executing |
|||||||
|
46 | - `Restart=on-failure` means restart if service crashed |
||||||
| 47 | - `RestartSec=5` delay for automatic restart |
|||||||
| 48 | - `Install WantedBy` tells the service what to do when `systemctl enable` is called |
|||||||
|
49 | |||||||
|
50 | 2. Test (only needed, if not started by timer (see below)) |
||||||
|
51 | ```bash |
||||||
| 52 | sudo systemctl daemon-reload |
|||||||
| 53 | sudo systemctl start <servicename>.service |
|||||||
| 54 | sudo systemctl status <servicename>.service |
|||||||
| 55 | ``` |
|||||||
| 56 | ||||||||
| 57 | 3. Create timer |
|||||||
| 58 | ```bash |
|||||||
| 59 | sudo nano /etc/system/system/<servicename>.timer |
|||||||
| 60 | ``` |
|||||||
| 61 | ||||||||
| 62 | ``` |
|||||||
| 63 | [Unit] |
|||||||
| 64 | Description=<name and how often as title> |
|||||||
| 65 | ||||||||
| 66 | [Timer] |
|||||||
| 67 | OnCalendar=*-*-* 03:15:00 |
|||||||
| 68 | Persistent=false |
|||||||
| 69 | Unit=<servicename>.service |
|||||||
| 70 | ||||||||
| 71 | [Install] |
|||||||
| 72 | WantedBy=timers.target |
|||||||
| 73 | ``` |
|||||||
| 74 | - OnCalendar sets time for daily start |
|||||||
| 75 | - Persistent=true would mean, that if Raspi would be offline during start time, the run will be catched up after the next start |
|||||||
| 76 | ||||||||
| 77 | 4. Enable / activate Timer |
|||||||
| 78 | ```bash |
|||||||
| 79 | sudo systemctl daemon-reload |
|||||||
| 80 | sudo systemctl enable --now <servicetimer>.timer |
|||||||
| 81 | systemctl status <servicetimer>.timer |
|||||||
| 82 | ``` |
|||||||
| 83 | - --now starts the timer after enabling |
|||||||
| 84 | ||||||||
| 85 | ## List all timers |
|||||||
| 86 | `systemctl list-timers` or `systemctl list-timers <servicename>.timer` |
|||||||
