0 10 * * 3 ou * 10 * * 3 ? Lisez le champ des minutes
0 10 * * 3 se déclenche une fois ; * 10 * * 3 se déclenche soixante fois en une heure. Lisez le champ des minutes, vérifiez l'ordre des champs, puis attendez la disponibilité plutôt que l'horloge.
Les deux expressions ressemblent à un mercredi matin, et une seule signifie une fois. 0 10 * * 3 se déclenche à 10:00 le mercredi ; * 10 * * 3 se déclenche à chaque minute de la dixième heure, soixante occasions de démarrer le même tunnel. Si la commande est un lanceur qui ne vérifie pas l'existence d'une session, la seconde version n'est pas une erreur de planification, c'est une boucle qui produit des propriétaires concurrents. Lisez le champ des minutes avant toute autre chose.
Les cinq champs sont minute, heure, jour du mois, mois et jour de la semaine, dans cet ordre, et une étoile dans le premier signifie chaque minute.
Le champ des minutes décide combien de fois
Le nombre de tête est la minute, donc 0 10 * * 3 est la première minute de la dixième heure le mercredi. Le remplacer par une étoile conserve l'heure et le jour et supprime la propriété d'unicité, ce qui produit soixante correspondances. Cron ne déduplique pas : chaque correspondance relance la commande. Ce n'est pas une subtilité de cron, c'est la sémantique des champs, et la référence du planificateur installé vaut la lecture, car l'ordre des champs et la colonne facultative du nom d'utilisateur diffèrent entre le crontab utilisateur et le crontab système.
Testez avec une commande inoffensive qui enregistre son propre horodatage pendant une journée. Une ligne dans le journal est une planification ; soixante lignes en une heure sont une leçon.
Ce qu'un second lancement fait au premier
Un lanceur bien élevé remarque que la connexion est déjà établie et ne fait rien. Une invocation brute d'openvpn non : elle crée un autre processus, une autre tentative de lier un périphérique ou un port, et un autre jeu de routes qui se disputent les mêmes destinations. Sous NetworkManager, les demandes d'activation répétées pour une connexion sont généralement idempotentes, et c'est précisément pourquoi le problème reste caché jusqu'à ce que quelqu'un utilise une autre commande. La planification devrait interroger le propriétaire qui gère déjà le tunnel.
Décidez ensuite ce que signifie une demande pendant que la connexion s'établit. Ni l'activation en double ni une file d'attente de démarrages en attente ne sont manifestement correctes ; choisissez-en une et faites-la implémenter par le lanceur, au lieu de laisser le planificateur décider par accident.
Comptez les champs avant la commande
Les crontabs utilisateur et système diffèrent selon qu'une colonne de nom d'utilisateur apparaît avant la commande. Une entrée copiée de l'un à l'autre s'exécute soit sous le mauvais compte, soit transmet le nom d'utilisateur comme premier mot de la commande. Consultez la référence installée plutôt qu'un guide, et comptez les champs de votre propre ligne. Une entrée à cinq champs avec un sixième mot avant la commande est un crontab système ; la même ligne dans un crontab utilisateur tente d'exécuter ce mot comme programme.
L'identité d'exécution porte l'environnement avec elle. Une tâche cron n'hérite pas d'un trousseau déverrouillé, d'une invite de mot de passe interactive ni du répertoire de travail dans lequel vous avez testé.
Attendez la disponibilité, pas l'horloge
Un lancement réussi n'est pas un tunnel opérationnel. Le client peut encore résoudre son point de terminaison, s'authentifier ou installer des routes lorsque la tâche se termine. Toute tâche dépendante devrait attendre la ressource protégée dont elle a réellement besoin, avec un délai borné et un échec journalisé, plutôt qu'un nombre fixe de secondes. Cette distinction sépare une planification qui fonctionne la plupart du temps d'une qui échoue silencieusement le matin chargé.
Si une MFA interactive est requise à cette heure-là, la tâche peut solliciter l'attention d'une personne mais ne peut pas fournir la réponse. Gardez ce cas explicite au lieu d'intégrer un mot de passe réutilisable ou de réessayer indéfiniment.
Pour une activation réellement unique, utilisez le mécanisme à usage unique pris en charge. Une règle récurrente qu'il faut retenir et supprimer est un futur lancement en double.