Estoy trabajando en una systemd
.service
secuencia de comandos que se supone que comienza después de que se monte una ubicación de red CIFS /etc/fstab
en /mnt/
el arranque.
El script espera que se inicie primero un script de dependencia de OpenVPN, pero también quiero que espere a que se complete el montaje.
/etc/systemd/system/my-daemon.service :
[Unit]
Description=Launch My Daemon
After=network.target vpn-launch.service
Requires=vpn-launch.service
Traté de agregar systemd.mount
a la línea: After=network.target vpn-launch.service systemd.mount
pero no dio los resultados que esperaba.
systemd-remount-fs
a tuAfter
lista?Respuestas:
No, no es. Haga esto bien, y el resto se acomoda naturalmente.
El montaje es manejado por una unidad de montaje systemd (generada) que se llamará algo así
mnt-wibble.mount
. Puede ver su nombre real en la salida delsystemctl list-units --type=mount
comando. Puede verlo en detalle como cualquier otra unidad consystemctl status
.Muy simple, entonces: debe ordenar que su unidad se inicie después de que se inicie esa unidad de montaje.
Otras lecturas
fuente
Lo siento pero no puedo comentar todavía.
Como dijo JdeBP, debe ordenar en el montaje del sistema de archivos. Puede predecir el nombre de la unidad de montaje o, alternativamente, puede usar (en la sección de la unidad):
Esta opción crea las dependencias a las unidades * .mount apropiadas para hacer que la ruta sea accesible antes de iniciar el servicio. Puede que no esté en todas las versiones de systemd, pero lo he estado usando en una máquina CentOS 7 durante los últimos 6 meses más o menos.
fuente
RequiresMountsFor=
Viene con su propio conjunto de advertencias. Con el error RedHat # 1088057 y Chris Siebenmann en la mano, debería poder responder a superuser.com/questions/988734 . También es una montura CIFS en esta pregunta. Pero la implicación es queauto
, afortunadamente, lo es .Aunque ambas respuestas son correctas, quiero agregar mis dos centavos a la discusión, porque cuando la busqué me faltaban algunas instrucciones y ejemplos de cómo proceder.
/etc/fstab
mount -a
que monta todos los sistemas de archivos mencionados en fstabsystemctl list-units | grep '/path/to/mount' | awk '{ print $1 }'
(debería devolver algo que termine con
.mount
)After=
declaración en el*.service
archivoAquí hay un ejemplo de cómo iniciar el
my-daemon
servicio en el arranque, pero una vez que la red está lista, se monta un recurso compartido CIFS/mnt/cifs
yvpn-launch
se inicia el servicio:/ etc / fstab
Nota: es posible que desee agregar
nofail
a sus opciones de fstab (por ejemplo, cuando usa una unidad externa). De lo contrario, su máquina no arrancará si el dispositivo no está conectado. Ver el artículo fstab de ArchWiki/etc/systemd/system/my-daemon.service
No olvide habilitar el servicio de modo que se inicie en el arranque:
systemctl enable my-daemon
Tenga en cuenta que esto también funciona para otros sistemas de archivos (NFS, HDD, etc.).
Como ya se mencionó, ambas respuestas son correctas y animo a todos a leerlas, pero para mí un par de ejemplos me habrían ahorrado algo de tiempo.
Actualización (2019-06-25):
mnt-cifs.mount
a laRequires=
lista, lo que hace quemy-daemon.service
no se inicie cuando el montaje cifs no se montó correctamentefuente
systemctl list-units --type=mount
.@ bm-bergmotte: gracias por tu instrucción que me ayudó mucho. Para mí solo funciona, si pongo
Si no pongo "mnt-cifs.mount" dentro de "Requiere" (y en este orden) funciona para reiniciar / iniciar, pero el servicio se inicia de todos modos, si el dispositivo no está montado. Después de colocarlo adicionalmente dentro de "" Requiere ", el servicio monta el dispositivo antes de iniciarlo, si el dispositivo no estaba montado.
fuente
After=
solo dicta la orden.Requires=
hace obligatorio que el montaje cifs deba estar presente (vea la respuesta de Sufiyan Ghori en ese sentido). Actualizaré mi respuesta.