Create the Unit File
vim /etc/systemd/system/queue.serviceThe unit file must have three sections (headers denoted by square brackets): [Unit], [Service] and [Install].
Deciding on Service Type
Choose from the following: simple, forking, oneshot, dbus, notify, idle.
Prefer the simple type which handles programs that run in the foreground. Use the forking type for programs that fork themselves into the background.
Tell systemd what to do when your service exits (default is Restart=no); the choices are no (default), always, on-success, on-failure, on-abnormal, on-watchdog, on-abort. Delay restart with RestartSec=.
More Configuration
Common variables:
WorkingDirectory= (change directory before executing processes)
RootDirectory= (chroot)
User=
Group=
UMask=
Environment= (variables)
Example of a Common Basic Service Unit File
# /etc/systemd/system/queue.service
[Unit]
Description=Queue Handler
After=network.target
[Service]
Type=simple
Restart=always
ExecStart=php /var/www/deploy/rxspark/current/artisan queue:listen redis --queue=test
[Install]
WantedBy=multi-user.targetsystemctl daemon-reloadsystemctl enable queue.service
Created symlink /etc/systemd/system/multi-user.target.wants/queue.service → /etc/systemd/system/queue.service.View the Service's Output
systemctl enable queue.serviceand
journalctl -xefu queue.service | lessOr if you fancy adding a log command to systemctl (shout out to the stack overflow user who proposed it; I did not save the link):
systemctl() {
if [[ "${1-}" == "log" ]]; then
/usr/bin/journalctl -u "${@:2}";
else /usr/bin/systemctl "$@";
fi
}