Probleem: Een Cron Job Eenmaal Uitvoeren Op Een Specifiek Tijdstip
Cron jobs worden meestal ingesteld om herhaaldelijk op geplande tijden te draaien. Soms moet je echter een taak slechts eenmaal op een specifiek tijdstip uitvoeren. Dit kan lastig zijn bij het instellen van cron om een enkele, tijdsspecifieke taak uit te voeren zonder deze te herhalen.
Oplossingen Voor Het Eenmaal Uitvoeren Van Cron Jobs Op Een Specifiek Tijdstip
Het 'at' Commando Gebruiken Voor Eenmalige Planning
Het 'at' commando plant eenmalige taken. Je kunt een toekomstig tijdstip instellen waarop een commando moet worden uitgevoerd. De syntaxis is:
echo "/path/to/command options" | at [time]
Om een commando morgen uit te voeren:
echo "/usr/bin/my_command" | at now + 1 day
Tip: Geplande Taken Verifiëren
Gebruik het 'atq' commando om alle geplande taken weer te geven. Dit helpt je te bevestigen dat je taak succesvol is gepland en het wachtrijnummer te bekijken voor mogelijke wijzigingen of verwijderingen.
Cron Job Met Zelfuitschakelend Script
Als 'at' niet beschikbaar is, maak dan een zelfuitschakelend script:
-
Stel een cron job in met een specifiek tijdstip:
0 0 2 12 * /path/to/your_script.sh -
Maak een script dat slechts eenmaal wordt uitgevoerd:
#!/bin/bash SCRIPT="/path/to/your_script.sh" MARKER="${SCRIPT}.done" if [ -f "$MARKER" ]; then exit 0 fi # Je eenmalige taak hier echo "Taak uitgevoerd" | mail -s "Eenmalige taak voltooid" user@example.com touch "$MARKER"
Dit script controleert op een markeringsbestand en sluit af als het bestaat, waardoor meerdere uitvoeringen worden voorkomen.
Cron Gebruiken Met Datumcontrole
Een andere methode gebruikt datumcontrole:
#!/bin/bash
EXECUTION_DATE="2023-12-25"
CURRENT_DATE=$(date +%Y-%m-%d)
if [ "$CURRENT_DATE" != "$EXECUTION_DATE" ]; then
exit 0
fi
# Je eenmalige taak hier
echo "Feestdagtaak uitgevoerd" | mail -s "Feestdagtaak voltooid" user@example.com
Dit script voert de taak alleen uit op de ingestelde datum en sluit af als de huidige datum niet overeenkomt.
Example: Logging Toevoegen Aan Datumgebaseerde Cron Jobs
#!/bin/bash
EXECUTION_DATE="2023-12-25"
CURRENT_DATE=$(date +%Y-%m-%d)
LOG_FILE="/var/log/one_time_cron.log"
if [ "$CURRENT_DATE" != "$EXECUTION_DATE" ]; then
echo "$(date): Script gecontroleerd, maar niet uitgevoerd (verkeerde datum)" >> "$LOG_FILE"
exit 0
fi
# Je eenmalige taak hier
echo "Feestdagtaak uitgevoerd" | mail -s "Feestdagtaak voltooid" user@example.com
echo "$(date): Taak succesvol uitgevoerd" >> "$LOG_FILE"
Dit voorbeeld voegt logging toe om uitvoeringspogingen en successen van het script bij te houden, wat nuttig is voor het monitoren en oplossen van problemen met eenmalige cron jobs.





