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 | ``` |
|||||||
| 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 | Environment=HOME=<home directory> |
|||||||
| 31 | ExecStart=/usr/bin/flock --nonblock /tmp/<lock filename>.lock <script with absolute path> |
|||||||
| 32 | ExecStop= |
|||||||
| 33 | ``` |
|||||||
| 34 | - wants/after network-online.target mean that this service needs the network to be online |
|||||||
| 35 | - Type `oneshot` is for short running tasks like backup scripts, `simple` for permanently running things like server and databases |
|||||||
| 36 | - 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 |
|||||||
| 37 | - flock create lock file to prevent different backups running in parallel |
|||||||
| 38 | - nonblock means, that additional starts doesn't wait but stop executing |
|||||||
| 39 | ||||||||
| 40 | 2. Test service |
|||||||
| 41 | ```bash |
|||||||
| 42 | sudo systemctl daemon-reload |
|||||||
| 43 | sudo systemctl start <servicename>.service |
|||||||
| 44 | sudo systemctl status <servicename>.service |
|||||||
| 45 | ``` |
|||||||
| 46 | ||||||||
| 47 | 3. Create timer |
|||||||
| 48 | ```bash |
|||||||
| 49 | sudo nano /etc/system/system/<servicename>.timer |
|||||||
| 50 | ``` |
|||||||
| 51 | ||||||||
| 52 | ``` |
|||||||
| 53 | [Unit] |
|||||||
| 54 | Description=<name and how often as title> |
|||||||
| 55 | ||||||||
| 56 | [Timer] |
|||||||
| 57 | OnCalendar=*-*-* 03:15:00 |
|||||||
| 58 | Persistent=false |
|||||||
| 59 | Unit=<servicename>.service |
|||||||
| 60 | ||||||||
| 61 | [Install] |
|||||||
| 62 | WantedBy=timers.target |
|||||||
| 63 | ``` |
|||||||
| 64 | - OnCalendar sets time for daily start |
|||||||
| 65 | - Persistent=true would mean, that if Raspi would be offline during start time, the run will be catched up after the next start |
|||||||
| 66 | ||||||||
| 67 | 4. Enable / activate Timer |
|||||||
| 68 | ```bash |
|||||||
| 69 | sudo systemctl daemon-reload |
|||||||
| 70 | sudo systemctl enable --now <servicetimer>.timer |
|||||||
| 71 | systemctl status <servicetimer>.timer |
|||||||
| 72 | ``` |
|||||||
| 73 | - --now starts the timer after enabling |
|||||||
| 74 | ||||||||
| 75 | ## List all timers |
|||||||
| 76 | `systemctl list-timers` or `systemctl list-timers <servicename>.timer` |
|||||||
