Muchos scripts de inicio de sysv utilizaron un archivo correspondiente /etc/default
para permitir que el administrador lo configure. Los trabajos iniciales pueden modificarse utilizando .override
archivos. ¿Cómo anulo o configuro las unidades systemd, ahora que systemd es el predeterminado en Ubuntu?
109
ExecStart=
con una entrada en blanco, no puede poner un comentario después de esto:ExecStart= # Empty line to clear previous entries.
Esto se tomará como otraExecStart=
entrada y se agregará a la lista. PD. No pude agregar comentarios a la respuesta de muru debido a mi baja reputación.Respuestas:
systemd
las unidades no necesitan obedecer archivos/etc/default
.systemd
es fácilmente configurable, pero requiere que conozca la sintaxis de los archivos de la unidad systemd.Los paquetes envían archivos de unidades típicamente en
/lib/systemd/system/
. Estos no deben ser editados. En cambio, lesystemd
permite anular estos archivos creando archivos apropiados en/etc/systemd/system/
.Para un servicio dado
foo
, el paquete proporcionaría/lib/systemd/system/foo.service
. Puede verificar su estado usandosystemctl status foo
o ver sus registros usandojournalctl -u foo
. Para anular algo en la definición defoo
, haga:Esto crea un directorio con el
/etc/systemd/system
nombre de la unidad y unoverride.conf
archivo en ese directorio (/etc/systemd/system/foo.service.d/override.conf
). Puede agregar o anular configuraciones con este archivo (u otros.conf
archivos/etc/systemd/system/foo.service.d/
).Anulación de argumentos de comando
Tome el
getty
servicio por ejemplo. Digamos que quiero tener el inicio de sesión automático TTY2 para mi usuario (esto no es aconsejable, sino solo un ejemplo). TTY2 es ejecutado por elgetty@tty2
servicio (tty2
siendo una instancia de la plantilla/lib/systemd/system/getty@service
). Para hacer esto, tengo que modificar elgetty@tty2
servicio.En particular, tengo que cambiar la
ExecStart
línea, que actualmente es:Para anular esto, haga:
Y añadir:
Tenga en cuenta que:
ExecStart
antes de colocarlo de nuevo, ya que es un ajuste de aditivo, similar aAfter
,Environment
(en su conjunto, no por cada variable) yEnvironmentFile
, y opuesto a por sobre los valores comoRestartSec
oType
.ExecStart
puede tener múltiples entradas solo paraType=oneshot
servicios.ExecStart
está en la[Service]
sección, por lo que mi anulación también debe incluirseExecStart
en la[Service]
sección. A menudo, echar un vistazo al archivo de servicio real usandosystemctl cat
le dirá qué necesita anular y en qué sección se encuentra.Por lo general, si edita un archivo de unidad systemd, para que surta efecto, debe ejecutar:
Sin embargo,
systemctl edit
automáticamente hace esto por usted.Ahora:
Y si lo hago:
y presiona CtrlAltF2, ¡listo! Voy a iniciar sesión en mi cuenta en ese TTY.
Como dije antes,
getty@tty2
es una instancia de una plantilla. Entonces, ¿qué pasa si quisiera anular todas las instancias de esa plantilla? Eso se puede hacer editando la plantilla en sí (eliminando el identificador de instancia, en este casotty2
):Anulando el medio ambiente
Un caso de uso común de los
/etc/default
archivos es establecer variables de entorno. Por lo general,/etc/default
es un script de shell, por lo que podría usar construcciones de lenguaje de shell en él. Sinsystemd
embargo, este no es el caso. Puede especificar variables de entorno de dos maneras:A través de un archivo
Digamos que ha establecido las variables de entorno en un archivo:
Luego, puede agregar a la anulación:
En particular, si su
/etc/default/grub
contiene solo asignaciones y sin sintaxis de shell, puede usarlo comoEnvironmentFile
.A través de
Environment
entradasLo anterior también podría lograrse utilizando la siguiente anulación:
Sin embargo, esto puede ser complicado con múltiples variables, espacios, etc. Eche un vistazo a una de mis otras respuestas para ver un ejemplo de tal instancia.
Otras lecturas
A través de este mecanismo, resulta muy fácil anular
systemd
unidades, así como deshacer dichos cambios (simplemente quitando el archivo de anulación). Estas no son las únicas configuraciones que se pueden modificar.Los siguientes enlaces serían útiles:
systemd
systemd
páginas de manual , en particular, las páginas de manualsystemd.unit
ysystemd.service
fuente
systemd.service(5)
, secciónExecStart
: "A menos que Type = sea un disparo, se debe dar exactamente un comando. Cuando se usa Type = oneshot, se pueden especificar cero o más comandos. Los comandos se pueden especificar proporcionando múltiples líneas de comando en el mismo o, alternativamente, esta directiva puede especificarse más de una vez con el mismo efecto. Si la cadena vacía se asigna a esta opción, la lista de comandos para iniciar se restablece, las asignaciones anteriores de esta opción no tendrán efecto ".sudo rm
anular el archivo y luegosystemctl daemon-reload
, o puedesystemctl edit
y reemplazar todo en la anulación con comentarios. Los comentarios en los archivos de servicio comienzan con#
.systemctl revert foo