Reducing shutdown timeout for “a stop job is running”

lsbrebootsystemd

I've got node.js and pm2 installed on a Pi (Raspbian). PM2 was configured to start via pm2 startup and the init scripts it creates. Sometimes when I reboot, shutdown hangs for a few minutes on:

A stop job is running for LSB: PM2 init script (... / 5min)

Every once in a while1 what I'm assuming is PM2 doesn't shut down properly and hangs for the full 5 minutes.

On this system, I know exactly what apps PM2 is managing and I really don't care if they shutdown properly.

My question is: How do I reduce the timeout from 5 minutes to, say, 15 seconds or so? Where is this configured?

I read on a forum that it was the DefaultTimeoutStopSec key in /etc/systemd/system.conf, so I tried setting that to "15s" but it had no effect. I tried the same thing in /etc/systemd/user.conf, too, but no change. The timeout is still set to 5 minutes.


1 I actually do know specifically what triggers this, but the details aren't important and the effect is unavoidable.

Best Answer

How do I reduce the timeout from 5 minutes to, say, 15 seconds or so?

You re-build systemd from source, patching the hardwired timeout in systemv-sysv-generator from TimeoutSec=5min to whatever you want. Or you ask the systemd people for a control knob somewhere in the Fedora/SUSE or LSB headers.

Or, on the gripping hand, you give up on using this rc script that you have and write a systemd service unit for your service, whose timeouts you can set with an explicit TimeoutSec= setting, installed with a drop-in settings file in /etc/systemd/system/pm2.service.d/timeout.conf if necessary.

Given this, this, this, this, this, and others, the first rule for migrating to systemd applies here as well.

Further reading