Systemd unit
If you just want to run gw
process in the background without installing anything, you can use systemctl
. You only have to create a systemd unit and start
and enable
it.
Note: by default systemd units run as root, so make sure to set up the necessary authentication (e.g. SSH keys) with the root user as well (or use a
User
directive or user systemd unit). You can test this by entering the directory with the root user and runninggit pull
orgw -vv .
.
Usage #
To create a new unit you have to create a new unit file at the default systemd unit location, usually /etc/systemd/system
.
You can change this example systemd unit to your use-case and copy it under /etc/systemd/system/gw.service
:
# /etc/systemd/system/gw.service
[Unit]
Description=Watch git repository at /path/to/repo
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/gw -v /path/to/repo -s 'echo ran from systemctl unit'
Restart=always
# run as a non-root user (recommended)
User=myuser
[Install]
WantedBy=default.target
To reload the systemd unit database, you have to run daemon-reload
:
systemctl daemon-reload
With this you should see a new gw.service
unit. You can start this with systemctl start
:
systemctl start gw
If you want to start this every time your server boots up, you can run systemctl enable
:
systemctl enable gw
To see if your unit is running you check the status, or read the logs with journalctl
:
systemctl status gw
journalctl -fu gw
For a more complicated example, check out the docker-compose systemd unit.
User systemd unit #
Most of the time the git configuration is only set up for some users, so it might make sense to run gw
as a user systemd unit. You can do it, but you have to be careful with some things.
The main issue with user services is that they are bound to the user session, so if you log out from the SSH, all started units will end. You can enable lingering with loginctl
to keep the systemd units running after logout:
loginctl enable-linger
After you set up lingering, you can create a similar systemd unit except under ~/.config/systemd/user/
:
# /home/myuser/.config/systemd/user/gw.service
[Unit]
Description=Watch git repository at /path/to/repo
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/gw /path/to/repo -s 'echo ran from systemctl unit'
Restart=always
[Install]
WantedBy=default.target
The same commands should work as above but with adding --user
after systemctl
. So to enable this unit above, you can start:
systemctl --user daemon-reload
systemctl --user start gw
systemctl --user enable gw
systemctl --user status gw
If you want to check the logs with journalctl
, make sure to add your user to the systemd-journal
group (requires root privileges):
sudo usermod -aG $USER systemd-journal
After this, you can read the logs of your user services:
journalctl -f --user-unit gw
User services can be a good way to use gw
if you don't have or don't want to use root privileges, while still being able to use an automatic deployment workflow.