3 ms·
> You actually can't. Maybe, maybe it can be done in some way, whatever 'it' is. > you can only write a shell script to be defensive about the things you know
by Woodi 3y ago
> You actually can't.
Maybe, maybe it can be done in some way, whatever 'it' is.
> you can only write a shell script to be defensive about the things you know about
And that is a problem strictly unique to shell scripting ? :) With systemd you know ? Or pick one arbitrary thing and just deny other possibilities ? Of course you deny (you as in the systemd implementer / beliver / user), as has been seen many many times. Suddenly usecase has been changed ! And maybe now you can do that with scripts even better then with systemd ? :)
> inheritable process state you can't manage with shell builtins
Is "builtins" a key world here ? Becouse shell scripts are quite literaly about using not build in pieces :)
> spawn a service in a pristine, controlled environment.
See ? Use case changed. It is no longer "user" or "other user", nor ssh or console or interactive, nor txt or X or W... Use case refactoring :) You can rething how to script it to not loss functionality.
Oh, wait... It's systemd ! Functionality loss is a motto there :) But scripts need to handle orginal usecase, for PR reasons :)
> process management in Linux is a real complicated bitch
nixes are complex. Lastly Linux have even more namespaces, contexts, etc. And you know what ? Systemd do not helped to make it simpler. Just wrapped some of them, badly (context v1 for years!) into internals and hijacked development of sane and modern system utilities.
> Simple is invariably neither robust nor correct.
Luckily we talking shell scripting here :) Becouse any system utility can be used. And they can be combined even ! Shocking ! ;)
> If we've already got a utility to help us write a services, we might as well extend it to be able to help with detecting stuff
Valid use case. Had been done ages ago. In modular fassion. With possibility of replacing monitoring part into other implementation. Can be even started from init.d script :)
> "is this service still actually running or did it somehow fart itself and die?"
And this is working on systemd ? :) Working better then in other service managers ? How systemd detect such conditions that other managers can't do that ? :) And why systemd display that not-funny messages of waiting for service to do something ? And permamently halting system halt ? And making my screen / tmux not working ? :)
> > Good luck debugging, fixing and splitting or just modifing or twiking systemd implementation :)
> I've had more issues debugging init scripts than I have with systemd stuff.
I have more problems with systemd configs then I had with using init.d scripts - they are just like command line(s), sequencial execution, easy to debug by just
looking on them and checking system / app state. And usually it's not script problem but something with app. How systemd can improve on that ? By blackboxing managing service ? :)
> I actually find debugging easier with systemd...
Maybe. But just wait systemd will make debugging effort poinless by changing systemd behavior :)
But you missed something: with pure scripts or simpler managers you know everything* about system you are running. With systemd you don't - you introduce additional complication. And constant CVEs stream. How that is easier to debug ?
> defective-by-default language / directories with spaces in their name
On contrary, *nix shell scripts are perfect for work they are doing - batching commands you type into pack for re-execution. Tested commands that work as expected. And "spaces" problem is solved. Do tar or cpio in script have problem with directories with spaces ? Do ls, find and others have options for better separating things ? Do shell allow '""' usage ?
Thing about scripts is that you are supouse to stop using them when usecase is more complicated. This is counted as +1 for scripts and +1 for init.d usage (and -1 for systemd monitic monster). Scripts work is just to be agregators for fast and clear development eg. for start / stop / check helpers that you copy / paste almoust literally. Just like configs in systemd :)
Edit:
Btw. Hey, I don't specially like init.d - it works, is simple, extendable, replacable in few hours, etc, etc. Just systemd is such monstrous insanity...
- jcranmer 3y ago> And that is a problem strictly unique to shell scripting ? :) With systemd you know ? Or pick one arbitrary thing and just deny other possibilities ? If I run /etc/init.d/foo start to start a service, the service is forked from my current shell and therefore inherits everything from the shell. If I instead run service foo start, the tool instead sends a message to PID 1 process to fork the service, inheriting everything from PID 1. At that point, anything that can be changed could only have been changed by systemd itself, so if systemd doesn't know about something, then it can only be in the default state. > And "spaces" problem is solved. No, it's not. Write a shell script that reads a shell command (that contains quoted arguments with spaces in them!) from a file, appends some extra arguments to that command, and runs that command. The only way I could get that working was to go through Python instead.
- Woodi 3y ago> If I run /etc/init.d/foo start [...] inherits everything from the shell 'su' and 'env' helped a lot all that decades. Until everyone started using sodo passwordless :) > If I instead run service foo start, the tool instead sends a message to PID 1 process to fork the service, inheriting everything from PID 1 Wait, you just want clean service ? I thinked usecase need to recognize how it is started and react to that ! But ok, send a signal 9 and inittabzerod will fork it with inheriting everything from pid 1 :) > > And "spaces" problem is solved > No, it's not Ok, it isn't :) They even rewrote git in C to use file descriptors instead of text paths. But moustly it is becouse it is a very known problem with decades of solutions already implemented in common tools. > Write a shell script that reads a shell command (that contains quoted arguments with spaces in them!) from a file, appends some extra arguments to that command, and runs that command So: do shell meta programming in shell ?? :) That's clear abuse becouse shell is not general purpose programming language. And how you do just that with systemd ? :) But if you want some editable template file then oneliner in sed or awk or perl or ... with some structure will do. No need for introducing CVEs with new and soon to be rewriten or removed or abandoned parser somewhere in milions of lines.