I recently migrated my Arch Linux VMs from sysvinit to systemd as the newer Arch install media are all using systemd and support for sysvinit is discontinued. The migration itself was an incredibly trivial and straight-forward process. I had only one hang up with the migration in general; every time I’d reboot the machine, eth0 wouldn’t come back up. That was fixed with a simple
systemctl enable [email protected].
After I had the migration complete, sshd (and everything else) enabled, and eth0 finally coming up, I had two services (or as systemd refers to them,
units) that I needed to configure; Chiliproject and
git-daemon. Adding these custom units to systemd was incredibly easy.
Your custom service files live in
/etc/systemd/system and end with the extension
.service. Here the contents of the two that I created:
[Unit] Description=sdbarker.com Chiliproject Requires=mysqld.service nginx.service Wants=mysqld.service nginx.service [Service] User=www-data WorkingDirectory=/path/to/chiliproject/install ExecStart=/usr/bin/bundle exec /usr/bin/unicorn_rails -E production -c config/unicorn.rb PIDFile=/path/to/chiliproject/install/tmp/pids/server.pid [Install] WantedBy=multi-user.target
[Unit] Description=Git daemon [Service] Type=forking User=git WorkingDirectory=/path/to/git/home ExecStart=/usr/lib/git-core/git-daemon --pid-file=/path/to/git/home/temp/pids/git-daemon.pid --detach --syslog --verbose --base-path=/path/to/git/home/repositories PIDFile=/path/to/git/home/pids/git-daemon.pid [Install] WantedBy=multi-user.target
Overall, it was an incredibly easy migration, and my startup time (however rare) is greatly reduced, service management is much, much easier, journalctl for viewing logs is very convenient, and removing all of the boilerplate initscript code that was always a pain in the ass and honestly always a bit flakey was very welcome.