Tengo un montón de archivos de servicio en /etc/systemd/service/myapp.*.service
Cada uno tiene una línea que parece...
User=Foo
…y necesito cambiar todos estos archivos .service para que todos digan…
User=Bar
¿Cómo hago esto de manera eficiente?
Respuesta aceptada:
¿Quién dice que necesitas cambiar los archivos? ☺
find /etc/systemd/service/ -maxdepth 1 -name 'myapp.*.service' | while read -r i do printf '[Service]\nUser=%s\n' 'Bar' > ${i}.d/change-user.conf done
Recuperar la definición de servicio estándar es un poco más fácil de esta manera.
rm -- /etc/systemd/service/myapp.*.service.d/change-user.conf
Haciendo todos estos un solo archivo que se aplica a un montón de servicios es, por supuesto, solo un simple ejercicio en el uso de enlaces físicos.
install -d /etc/systemd/temp printf '[Service]\nUser=%s\n' 'Bar' > /etc/systemd/temp/change-user.conf find /etc/systemd/service/ -maxdepth 1 -name 'myapp.*.service' | while read -r i do ln /etc/systemd/temp/change-user.conf ${i}.d/change-user.conf done
Esta es, por supuesto, la forma oficial de hacer este tipo de cosas con unidades proporcionadas por paquetes y generadas en tiempo de ejecución, además. Se supone que no para cambiar dichos archivos de unidad.
Lecturas adicionales
- Lennart Poettering (2013-10-07).
systemd.unit
. páginas del manual systemd. freedesktop.org.