J’essaie d’ajouter une tâche cron simple à exécuter dans mon conteneur Docker. Je souhaite qu’elle soit ajoutée lors de la configuration afin qu’elle s’exécute automatiquement une fois que ./launcher rebuild app est terminé.
La tâche cron fonctionne lorsque je l’ajoute manuellement au fichier /etc/cron.d/anacron avec vim, mais si je l’édite sans entrer et sauvegarder le fichier (c’est-à-dire avec echo -n '* * * * * root python3 /var/www/discourse/script/email_me.py' >> /etc/cron.d/anacron), cron ne semble pas prendre en compte le changement et n’exécute pas la tâche.
Si j’ajoute ensuite un espace n’importe où dans le fichier avec vim et que je sauvegarde, cron prend en compte le changement et commence à exécuter la tâche.
Comme les modifications ne sont pas prises en compte lors de l’ajout via la commande echo, l’ajout de cette commande à mon fichier app.yml ne fonctionne pas.
J’ai également essayé docker restart app après avoir ajouté les modifications avec echo, mais cela n’a toujours pas fonctionné.
J’ai l’impression qu’il doit y avoir une méthode plus simple que j’ignore. Devoir modifier le fichier anacron après la configuration semble être la mauvaise approche.
Merci de votre retour ! Cela devrait peut-être être plus clair :
J’exécute un dépôt Discourse hébergé en privé avec certains fichiers personnalisés.
J’ai un fichier dans le répertoire script de Discourse appelé email_me.py.
Lorsqu’il est exécuté, ce fichier m’envoie un e-mail indiquant « Bonjour le monde ! ».
Je souhaite créer une tâche cron dans le conteneur Docker de Discourse qui exécutera ce fichier toutes les minutes.
Cela peut être réalisé en ajoutant manuellement la ligne * * * * * root python3 /var/www/discourse/script/email_me.py au fichier /etc/cron.d/anacron à l’aide d’un éditeur comme vim.
Je veux que la tâche cron ci-dessus s’exécute lors de la configuration du conteneur Discourse, mais je ne peux pas utiliser vim pour le faire depuis le fichier app.yml.
J’ai essayé d’utiliser echo -n '* * * * * root python3 /var/www/discourse/script/email_me.py' >> /etc/cron.d/anacron comme commande dans le fichier app.yml. Cela ajoute bien la ligne au fichier anacron, mais la tâche ne s’exécute PAS (comme si la modification n’avait pas été enregistrée).
Je cherche simplement un moyen d’assurer que la tâche : * * * * * root python3 /var/www/discourse/script/email_me.py
s’exécute après une reconstruction avec ./launcher rebuild app.
Vous devriez vraiment suivre les conseils de @eviltrout et procéder correctement via un plugin en utilisant nos tâches planifiées Sidekiq.
Mais si vous souhaitez manipuler ces modifications non prises en charge de cron, vous devrez probablement redémarrer le service après avoir ajouté une tâche avec sv restart cron.
Pour être plus clair, je suis curieux de connaître votre objectif final, pas les étapes que vous utilisez pour l’atteindre. Si l’objectif est de recevoir un email chaque minute, vous pouvez le faire dans un travail Sidekiq au sein d’un plugin, ce qui est nettement plus simple.
Mon objectif final est d’exécuter une requête de base de données à la recherche d’activités utilisateur spécifiques et d’envoyer un e-mail contenant un tableau avec les résultats. Cet e-mail servira de confirmation de prépaiement, car les utilisateurs ayant effectué cette activité spécifique seront payés plus tard dans la journée (via PayPal) par un autre script exécuté par cron.
J’ai déjà des scripts capables de faire ces deux choses, mais je dois simplement trouver un moyen de faire en sorte que le conteneur Discourse les exécute une fois par semaine.
Je ne connais pas Sidekiq. S’il peut le faire, où devrais-je chercher pour l’apprendre ?
Merci !
(Aussi, j’ai essayé sv restart cron et bien d’autres façons de redémarrer cron, sans succès.)
Oui, cela a parfaitement fonctionné. J’ai dû créer le dossier rr et les fichiers cron.d.rr. J’ai placé mon tâche cron dans le fichier cron.d.rr et la commande cp a fonctionné.
Merci !
Maintenant, je vais m’atteler à écrire un véritable plugin…