J'ai un service qui dépend de Cassandra qui monte avec élégance et de la grappe est prête et prête.
Pour que l'ordre de dépendance soit respecté, j'ai le fichier d'unité suivant
[Unit]
Requires=cassandra.service
After=cassandra.service
[Service]
Environment=Java_HOME=/usr/Java/jre
[email protected]@/webapps/bringup-app/bin/bringup
TimeoutStartSec=0
ExecStop=
[email protected]@/logs/bringup.pid
Restart=always
[Install]
WantedBy=multi-user.target
Comment puis-je m'assurer que le processus bringup-app attend 30 secondes avant de tenter de démarrer? Actuellement, bien que démarré après Cassandra, j'ai remarqué que le cluster Cassandra n'est pas encore opérationnel et par conséquent, toute tentative de la part de bringup-app de se connecter à Cassandra lors du démarrage échoue.
Je veux donc ajouter un délai. Est-ce possible via le fichier d'unité?
Vous pouvez exécuter la commande sleep avant votre ExecStart avec ExecStartPre :
[Service]
ExecStartPre=/bin/sleep 30
Je pense que cette réponse sur le super utilisateur est une meilleure réponse . https://superuser.com/a/573761/67952
Mais puisque vous avez demandé un moyen sans utiliser Avant et Après, vous pouvez utiliser:
Type=idle
qui comme man systemd.service
explique
Le comportement du ralenti est très similaire au simple; Toutefois, l'exécution réelle du programme de service est retardée jusqu'à ce que toutes les tâches actives soient envoyées. Ceci peut être utilisé pour éviter l’entrelacement des sorties de Services Shell avec la sortie d'état sur la console. Notez que ce type est utile uniquement pour améliorer la sortie de la console, il n'est pas utile en tant qu'outil de commande d'unité général et son effet le type de service est soumis à un délai d'expiration de 5 secondes, après quoi le programme de service est appelé de toute façon.
Vous pouvez créer un fichier unité .timer
systemd pour contrôler l'exécution de votre fichier unité .service
.
Ainsi, par exemple, pour attendre 1 minute après le démarrage avant de démarrer votre foo.service
, créez un fichier foo.timer
dans le même répertoire avec le contenu:
[Timer]
OnBootSec=1min
Vous pouvez trouver quelques autres options et toutes les informations nécessaires ici: https://wiki.archlinux.org/index.php/Systemd/Timers
Au lieu de modifier le service de rappel, ajoutez un délai post-démarrage au service dont il dépend. Éditez cassandra.service
comme suit:
ExecStartPost=/bin/sleep 30
De cette façon, le sommeil supplémentaire ne devrait pas ralentir les redémarrages de la levée.