Let systemd manage your running of unprivileged scripts


let's save a text file named "test.sh" having the following content

#! /bin/bash
for i in `seq 50`
   echo $i
   sleep 1

it just print number from 1 to 50 second by second (you can change 50 to any number) now as regular user type

chmod +x ./test.sh
systemd-run --user --unit=my-test ./test.sh 

the above command will run the script as a user service called my-test

at any time you can trace it with systemctl and see the logs using journalctl like this

journalctl -ln 100 -f --user-unit=my-test
systemctl --user status my-test

you can abort it using

systemctl --user stop my-test

Use cases

Let's assume you have a web interface that trigger something and you want to trace it later
just make your unprivileged web application (written in php/python and running as regular non-root user) called "systemd-run --user" and query the status and follow the logs using systemctl and journactl

for example if you have a web interface that triggers building something, running a database migration or indexing something, deploying some ansible playbook ...etc. 

  • you can check if it's running
  • you can start a new job
  • you can monitor the status
  • you can follow the logs
  • you can get real time notification using dbus


Popular posts from this blog

DIY Docker using Skopeo+OStree+Runc

Multi-host docker cluster using OVS/VxLAN on CentOS 7

Bootstrapping Alpine Linux QCow2 image