Sur un serveur Red Hat fraîchement redémarré, un SGBD Oracle ne démarre pas. systemctl status nous indique « Result: timeout », « code=killed, signal=TERM », « Start operation timed out. Terminating. », « Control process exited, code=killed, status=15/TERM », et « Failed with result 'timeout'. ».
Si l'on démarre le service à la mano (systemctl start oracledb), on obtient « Job for oracledb.service failed because a timeout was exceeded ».
Par défaut, systemd accorde 1 minute 30 à chaque service pour démarrer et pour s'arrêter (cf grep Timeout /etc/systemd/system.conf).
Notre Oracle dépasse le temps imparti. Pour augmenter ce délai, il faut surcharger l'unit avec systemctl edit oracledb. Contenu de la surcharge :
[Service]
TimeoutStartSec=300
Normalement, systemd prend en compte cette modif' immédiatement, mais pour s'en assurer : systemctl daemon-reload.
On peut ensuite démarrer notre service (systemctl start oracledb), il fonctionnera, y compris au prochain redémarrage.
P.-S. : j'aime bien la façon de faire du tutoriel pointé par ce shaarli. systemctl edit crée une surcharge nommée « override.conf » stockée dans un sous-dossier nommé du nom de l'unit. Ainsi, si l'on change plusieurs paramètres, tout est dans un même fichier. Pratique ou non, c'est subjectif et ça dépend des cas (avec Puppet, on préfère déployer des fichiers unitaires de type "briques de base". Un pour configurer le timeout, un pour modifier les dépendances d'un service, etc. car c'est plus facilement ré-utilisable). Si l'on parcourt /etc/systemd/system, on voit que telle unit est surchargée mais il faut ouvrir la surcharge pour savoir ce qui l'est. Dans le tuto, il crée un fichier de surcharge nommé par le but recherché, « startup-timeout », c'est lisible.