Tâche Cron pour exécuter le dernier jour du mois
J'ai besoin de créer une tâche cron qui s'exécute sur le tout dernier jour du mois.
Je vais le créer à partir de cpanel.
Toute aide est appréciée.
Grâce
Vous devez vous connecter pour publier un commentaire.
Probablement le moyen le plus facile est de simplement faire trois emplois différents:
Qui sera exécuté le 28 février, même les années bissextiles ainsi, si c'est un problème, vous aurez besoin de trouver un autre moyen.
Cependant, il est généralement à la fois beaucoup plus simple et correcte pour exécuter le travail dès que possible sur le première jour de chaque mois, avec quelque chose comme:
et modifier le script pour le processus de la précédente données du mois.
Cela supprime toute tracas vous pouvez rencontrer avec savoir quel jour est le dernier du mois, et s'assure également que toutes les données de ce mois est disponible, en supposant que vous êtes de traitement de données. Course à cinq minutes à minuit le dernier jour du mois de mai voir vous manque quoi que ce soit qui se passe entre alors et minuit.
C'est la manière habituelle de le faire de toute façon, pour la plupart en fin de mois les emplois.
Si vous avez encore vraiment souhaitez exécuter le dernier jour du mois, une option est de simplement détecter si demain est le premier (dans le cadre de votre script, ou dans la crontab pour lui-même).
Donc, quelque chose comme:
devrait être un bon début, en supposant que vous avez une relativement intelligent
date
programme.Si votre
date
programme n'est pas assez avancé pour vous donner des dates relatives, vous pouvez simplement mettre ensemble un programme très simple pour vous donner demain est le jour du mois (vous n'avez pas besoin de la plein puissance dedate
), tels que:et ensuite utiliser (en supposant que vous avez appelé
tomdom
pour "demain est le jour du mois"):Mais vous pouvez envisager d'ajouter une vérification d'erreur, puisque les deux
time()
etmktime()
pouvez retourner-1
si quelque chose va mal. Le code ci-dessus, pour des raisons de simplicité, de ne pas en tenir compte.55 23 29 2 * myjob.sh
, juste au cas où.Il y a un peu plus courte méthode qui peut être utilisée semblable à l'une de celles mentionnées ci-dessus. Qui est:
Également, l'entrée crontab pourrait être mise à jour seulement vérifier le 28 à 31, il est inutile en l'exécutant les autres jours du mois. Ce qui vous permettrait d':
/bin/sh: -c: line 1: unexpected EOF while looking for matching ')'
.[ $(date -d +1day +\%d) -eq 1 ] && run_job
posix
et POSIX date ne prend pas en charge"-d +1day"
:-\ A de plus compliqué (et laid) solution serait:[ `date +\%d` -eq `cal | xargs echo | awk '{print $NF}'` ] && myscript.sh
Mis en place une tâche cron pour exécuter le premier jour du mois. Ensuite, changer le système de l'horloge d'une journée à l'avance.
Ce sujet de celui-ci, après Wikipédia?
Adaptation paxdiablo la solution, j'ai exécuté le 28 et 29 février. Les données de la 29e remplace le 28.
,29
.55 23 28 2
?Vous pourriez mettre en place une tâche cron pour exécuter sur chaque jour du mois, et le faire exécuter un script shell comme suit. Ce script fonctionne si demain le nombre de jours est inférieur à aujourd'hui (c'est à dire, si demain, est un nouveau mois), et puis tout ce que vous voulez.
Certains cron implémentations de soutenir le "L" drapeau pour représenter le dernier jour du mois.
Si vous avez de la chance d'être en utilisant l'un de ces implémentations, c'est aussi simple que:
Qui va exécuter à 11:55 pm, le dernier jour de chaque mois.
http://www.quartz-scheduler.org/documentation/quartz-1.x/tutorials/crontrigger
Découvrez une une question relative à la sur le unix.com forum.
Pour une méthode plus sûre dans un crontab basé sur @Indie solution (utiliser le chemin absolu
date
+$()
ne fonctionne pas sur tous les crontab systèmes):Pour AWS Cloudwatch cron de mise en œuvre (Planification des Lambdas, etc..) cela fonctionne:
Cours d'exécution à 11:55pm le dernier jour de chaque mois.
Vous pouvez simplement vous connecter toutes les réponses dans un cron ligne et d'utiliser seulement
date
commande.Il suffit de cocher la différence entre le jour du mois, qui est aujourd'hui et le sera demain:
Si ces différence est en dessous de 0, cela signifie que nous avons de changer le mois et il est le dernier jour du mois.
Quoi à ce sujet?
modifier l'utilisateur
.bashprofile
ajoutant:Puis ajouter cette entrée crontab: