Lee man 5 systemd.unit
y man 5 systemd.target
nos dice que los archivos de la unidad se utilizan para definir objetivos, así como todo lo demás systemd. No hay documentación específica sobre cómo crear un objetivo , por lo que es difícil determinar cómo se debe hacer, pero no es muy diferente de crear un servicio.
Cuando cree su destino, necesitará hacer enlaces simbólicos al target.wants
directorio desde el directorio de servicios systemd. Entonces puedes establecer / arrancar tu objetivo. Así es como podría verse dado su ejemplo.
/etc/systemd/system/foo.target
Este es el archivo de unidad del objetivo. Si se toma graphical.target como ejemplo, podemos crear nuestro propio objetivo utilizándolo como base.
[Unit]
Description=Foobar boot target
Requires=multi-user.target
Wants=foobar.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target
AllowIsolate=yes
Para explicar las opciones tomadas de las páginas de manual de systemd;
Description
- Describe el objetivo. Usted debe comprender
Requires
- Dependencias duras del objetivo. Debería permitir que el sistema básico se inicie antes de iniciar su (s) propio (s) servicio (s)
Wants
- Dependencias suaves. El objetivo no requiere que estos comiencen.
Conflicts
- Si una unidad tiene una configuración de Conflictos en otra unidad, al iniciar la primera se detendrá la segunda y viceversa.
After
- Botas después de estos servicios
AllowIsolate
- Realmente depende de usted y su entorno. Los detalles están disponibles en la página de manualsystemd.unit(5)
/etc/systemd/system/foo.target.wants/
Este es el directorio donde vinculará los servicios que cree / requiera para su objetivo. Es equivalente a la Wants=
opción en el archivo de la unidad. Cree este directorio y luego cree enlaces simbólicos como este; ln -s /usr/lib/systemd/system/bar.service /etc/systemd/system/foo.target.wants/bar.service
. Esto crea un enlace simbólico de bar.service en el directorio del sistema a su directorio foo.target.wants.
Creo que crear un archivo de unidad para un servicio está fuera del alcance de esta respuesta, y esa pregunta definitivamente está más documentada, así que lo dejaré fuera por ahora. Cuando cree su archivo de unidad, simplemente enlace simbólicamente en el directorio target.wants o agréguelo a la Wants=
directiva.
foo.target
alRequires
campo y alBefore
campo demulti-user.target
, y me gustaRequires: base.target foo.target
. Después de eso reinicio mi Arch Linux vm, yfoobar.service
se ejecutará como daemon automáticamente.