Hoe Een Cron Job Slechts Één Keer Op Een Specifiek Tijdstip Uitvoeren?

Gepubliceerd 21 augustus 2024

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:

  1. Stel een cron job in met een specifiek tijdstip:

    0 0 2 12 * /path/to/your_script.sh
  2. 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.