Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Convert SysV Init scripts to Systemd Unit File

Let's say you have a SysV Init Script named foo

  1. Copy the file to /etc/init.d/foo

  2. Enable the SysV service: chkconfig --add foo

  3. Enable the SysV service: chkconfig foo on

  4. Start the service: service foo start. After this, systemd-sysv-generator will generate this file /run/systemd/generator.late/foo.service, copy this file to /etc/systemd/system by running: cp /run/systemd/generator.late/foo.service /etc/systemd/system/foo.service

  5. Edit /etc/systemd/system/foo.service by running systemctl edit foo.service, add in the following line to foo.servie (this makes the service installable)

  6. Enable the service: systemd enable foo.service

  7. (Optional) You can then remove the SysV script by running chkconfig foo off && chkconfig --del foo

Copy link

poosterl commented Dec 9, 2017


I'm struggling to get this working on CentOS 7 as well as on SUSE SLES 12.
In step 4, /run/systemd/generator.late/.service is not being generated.
Apparently "systemd-sysv-generator" is nowhere to be found on the system.

Any ideas?


Copy link

Seems like chkconfig is no longer available on Ubuntu 16.04.

Copy link

systemd enable foo.service
should read
systemctl enable foo.service

Copy link

Narimm commented Jan 19, 2018

I dont quite understand how this changes things...given that the systemd script will have a line
ExecStart=/etc/init.d/foo start
ExecStop=/etc/init.d/foo stop

You are still using the init.d script

Copy link

Narimm commented Jan 19, 2018

Additionally chkconfig is replaced by update-rc.d
on Ubuntu 16

Copy link

kamal-rathi-EMR commented Jun 8, 2020

post is really good,it helped me a lot
issue is that now all processes in user.slice got mercilessly killed even if your services in sysVinit was desgined to run first when you initate reboot or shutdown.

I have tried to put After=user.slice in [unit] section and WantedBy=user.slice in [Install] but no luck

Any suggestion if i want my service to initiated before processes in user.slice killed.

Description=LSB: stop ORACLE DB Tier Databases in /etc/instances

ExecStart=/etc/rc.d/init.d/dbtiershut start
ExecStop=/etc/rc.d/init.d/dbtiershut stop

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment