in my config file exists…
exec-once = zsh -c 'sleep 1' && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar
Why? Because waybar crashes sometimes when I turn my monitor off/on, I documented this here: https://github.com/Alexays/Waybar/issues/3047
…this opens waybar if it crashes… and if that crashes, it opens another waybar
Is there a less ridiculous way of making waybar open every time when waybar crashes, giving me better fault tolerance?
What about a while loop?
I would install a systemd user service with the setting
Restart=always
. If your window manager is started with systemd, or defines a systemd target you can configure the waybar service to start and stop automatically with the window manager.while true; do waybar; done
Thank you!
😬 😄
Have you tried using the latest git version of Waybar? They fixed a segfault a few days ago which might be the same one you’re facing.
…that does indeed look very similar, but my solution makes it so that if waybar crashes it doesn’t even matter, which I quite like, even if the segfault has been fixed.
I think OPs solution is fucking hilarious
I thought && only proceeded to the next statement if the first did not crash
I guess waybar still returns 0 on segfault. Seems weird.
Nah I just noticed it crashed anyway and didn’t assume it was a flaw in my methodology but rather that i ran out of waybars queue’d
Yeah you would need to use a ; instead of &&
Ok firstly that’s hilarious. Secondly I’m pretty sure
&&
means “execute the second thing if the first thing exits with code 0” so if waybar is segfaulting it shouldn’t execute any of the other waybars; if you were to do it this way (while true or a systemd service as suggested in the comments makes more sense) a semicolon would probably make sense?Yeah I noticed it wasn’t actually working and for some reason assumed that it was because it crashed so many times that I ran out of waybars, so I added a million after that, and you’re totally right, I know better than that, thanks!
Same problem here, this is my solution:
exec-once = bash -c 'until waybar; do echo "Waybar crashed with exit code $?. Respawning..." >&2; done'
Just make a user systemd unit if one doesn’t already exist, set to relaunch on failure, then all set.
This would have the additional benefit of collecting output files for future debugging. I’m not sure if systemd units can run Wayland applications, though.
Putting something like this should probably work, though?
[Unit] Description=Waybar PartOf=graphical-session.target After=graphical-session.target [Service] Type=exec Restart=on-failure ExecStart=waybar [Install] WantedBy=graphical-session.target
This is so ridiculous, I fucking love it. I just have waybar bound to a hotkey, but this solution is truly amazing
Just do an infinite loop
exec_once = zsh -c 'while true; do waybar; done'