That’s why you launch them through systemd.
But systemd is the devil and makes nothing better, right?
Right?
Really? I’ve never had issue with it
It’s a joke about the criticism systemd gets
openrc exists
Openrc is bloat, you should manually pair electrons
The constant nagging by you systemd people worked. I’ve written a unit that does what I need it to do. That was more annoying than I think it needed to be, but well… my solution didn’t work at all.
AFAIK kernel itself doesn’t send any signals to processes on shutdown/reboot, it just stops executing them. This is a job service manager (e.g. systemd) that terminates processes using SIGTERM before asking kernel to shutdown.
You are never guaranteed to be able to do anything during a crash. You are better off handling these kinds of edge cases in a recovery phase during the start of your app.
It’s not a crash. It’s a graceful shutdown. I expected that to also shutdown my app gracefully.
I’m actually trying to store the program state that hasn’t been persisted yet to disk. Good luck doing that after the next boot.
Persist everything to disk in real time. When the signal hits exit immediately.
Persist everything to disk in real time.
That’s the thing I’m trying to avoid.
Crash-only software. To be resilient you need some kind of ACID anyway which means that you can let go of your shutdown procedure and just send yourself SIGKILL instead.
This is legitimately the best usage of this meme I’ve seen in years. Termination signals hnnngg
Can’t SIGTERM be observed to react to a poweroff?
That’s what I thought, but my program never receives the signal.
Interesting. Is this top answer accurate then?
https://stackoverflow.com/questions/31731980/handling-a-linux-system-shutdown-operation-gracefully
It turns out I’m getting SIGCHLD. It might be related to how my script is started – it is a bash script that starts a node process and is itself run by Cinnamon’s (?) startup applications feature.Wrong; still investigating
How are you running your script?
(I have no idea how to solve your issue I’m just asking questions to sound smart and helpful)
It’s a node process invoked by a
run.sh
, which gets executed via a.desktop
file in the~/.config/autostart
directory.I went with a systemd unit now and it works.
I thought someone here had mentioned that the environment and user executing the script at startup and you running the script might have differences. The reason it would have worked with systemd might be that the environment was loaded correctly?
Why should the environment make a difference when it comes to receiving the SIGINT when the process gets killed?
They responded to the wrong post. They’re likely thinking of the auto start post.
Oops yeah you’re right. Sorry OP. There’s nothing better than using a database that flushes to disk often enough that missing a small chunk of data due to interruptions should be fine. Probably some kind of memory mapped IO on top of eager writing filesystem should do a good enough job.
SIGHUP or SIGPWR, maybe?
nope, SIGCHLD.Wrong.But thanks.