Aggiornare file crontab per l'esecuzione giornaliero di uno script

di il
9 risposte

Aggiornare file crontab per l'esecuzione giornaliero di uno script

Salve a tutti
ho la necessità di aggiornare quotidianamente, tendenzialmente la mattina, il file crontab per eseguire uno script per la chiusura delle tapparelle.
Ho uno script che mi recupera l'ora del tramonto a cui aggiungo 30 min, e questo orario poi dovrà essere la schedulazione dello script delle tapparelle per quel giorno.
Banalmente la schedulazione precedente deve essere eliminata o cmq aggiornata con il nuovo orario.

Grazie a tutti

9 Risposte

  • Re: Aggiornare file crontab per l'esecuzione giornaliero di uno script

    Invece di cron, puoi usare at. Prendi il tuo script che trova l'ora del tramonto e lo modifichi in modo che ritorni una cosa del genere:
    echo "chiudi_tapparelle.sh" | at 2030
    Lo script verrà eseguito tramite /bin/sh nella directory dove è stato creato.
  • Re: Aggiornare file crontab per l'esecuzione giornaliero di uno script

    Andrea Quaglia ha scritto:


    Invece di cron, puoi usare at. Prendi il tuo script che trova l'ora del tramonto e lo modifichi in modo che ritorni una cosa del genere:
    echo "chiudi_tapparelle.sh" | at 2030
    Lo script verrà eseguito tramite /bin/sh nella directory dove è stato creato.
    grazie mille per il consiglio!!!
    scusa l'ignoranza, qual'è la differenza sostanziale tra l'avere tutto nel file crontab che usare questa altra soluzione?
    diciamo che uso prettamente crontab così vado a vedere/modificare nel file tutto ciò che è schedulato

    Con at ho una cosa simile a crontab -l?

    Grazie ancora
  • Re: Aggiornare file crontab per l'esecuzione giornaliero di uno script

    Sono riuscito a mettere in piedi lo script che alla fine schedula il job
    Ho un piccolo problema con gli apici. Nel senso, che da linea di comando io eseguo proprio
    echo "sudo python /var/www/script/runTapESP.py tap2 up job" | at 08:56
    e funziona senza problemi (ho messo l'ora a mano per vedere il funzionamento effettivo).

    Alla fine ho messo a crontab ad ora di pranzo il bash script che mi crea la schedulazione
    Però vedo che non fa il suo dovere, perchè ho problemi con gli apici. Devo fare un echo che mi scrive appunto
    echo "sudo python /var/www/script/runTapESP.py tap3 down job" | at $new_sunset
    infatti nello script ho scritto
    echo "echo "sudo python /var/www/script/runTapESP.py tap3 down job" | at $new_sunset"
    ho fatto varie prove lanciando dopo
    at -l
    ma non lo vedo

    Con il comando che mi fa vedere i job schedulati, è possibile vedere il dettaglio? visualizzo solo l'ora e l'utente che ha schedulato qualcosa

    Grazie ancora
  • Re: Aggiornare file crontab per l'esecuzione giornaliero di uno script

    rdie77 ha scritto:


    Con il comando che mi fa vedere i job schedulati, è possibile vedere il dettaglio? visualizzo solo l'ora e l'utente che ha schedulato qualcosa
    mi rispondo da solo su questa part
    at -c N
    atrm N
  • Re: Aggiornare file crontab per l'esecuzione giornaliero di uno script

    Risolto in questo modo
    exe() { echo "\$ ${@/eval/}" ; "$@" ; }
    exe eval "echo 'sudo python /var/www/script/runTapESP.py tap3 down job' | at $new_sunset"
    è il modo migliore?

    grazie ancora
  • Re: Aggiornare file crontab per l'esecuzione giornaliero di uno script

    rdie77 ha scritto:


    grazie mille per il consiglio!!!
    scusa l'ignoranza, qual'è la differenza sostanziale tra l'avere tutto nel file crontab che usare questa altra soluzione?
    diciamo che uso prettamente crontab così vado a vedere/modificare nel file tutto ciò che è schedulato

    Con at ho una cosa simile a crontab -l?

    Grazie ancora
    cron è più indicato per comandi ripetitivi. at è utile per una esecuzione singola. Visto che tu cambi ora ogni giorno, at è più flessibile, e dopo l'esecuzione si cancella da solo.
    L'equivalente di crontab -l è atq.
  • Re: Aggiornare file crontab per l'esecuzione giornaliero di uno script

    rdie77 ha scritto:


    Risolto in questo modo
    exe() { echo "\$ ${@/eval/}" ; "$@" ; }
    exe eval "echo 'sudo python /var/www/script/runTapESP.py tap3 down job' | at $new_sunset"
    è il modo migliore?

    grazie ancora
    Non so se è il metodo migliore, non bazzico PHP (o quel che è) da secoli (eval is evil...). Puoi anche fare un file, salvarlo da qualche parte e fare "at -f <nomefile> timespec".
  • Re: Aggiornare file crontab per l'esecuzione giornaliero di uno script

    Andrea Quaglia ha scritto:


    rdie77 ha scritto:


    grazie mille per il consiglio!!!
    scusa l'ignoranza, qual'è la differenza sostanziale tra l'avere tutto nel file crontab che usare questa altra soluzione?
    diciamo che uso prettamente crontab così vado a vedere/modificare nel file tutto ciò che è schedulato

    Con at ho una cosa simile a crontab -l?

    Grazie ancora
    cron è più indicato per comandi ripetitivi. at è utile per una esecuzione singola. Visto che tu cambi ora ogni giorno, at è più flessibile, e dopo l'esecuzione si cancella da solo.
    L'equivalente di crontab -l è atq.
    grazie mille!!
  • Re: Aggiornare file crontab per l'esecuzione giornaliero di uno script

    Ora ho un piccolo problema sulla somma dei 30 min....nel senso sono andato a tentativi ma la formula non mi convince tanto, non per altro perchè non capisco la logica...

    Di seguito lo script completo che calcola il valore dell'ora (trovato su internet), al netto del comando da schedulare che è la parte finale che funziona ed ho omesso
    
    #!/bin/bash
    
    location="ITXX0042"
    
    sun_times=$( lynx --dump  https://weather.com/weather/today/l/$location | grep "\* Sun" | sed "s/[[:alpha:]]//g;s/*//" )
    sunrise=$(date --date="`echo $sun_times | awk '{ print $1}'` AM" +%R)
    sunset=$(date --date="`echo $sun_times | awk '{ print $2}'` PM" +%R)
    
    echo "$sunset"
    
    new_sunset=$(date -d "$sunset + 2:30 hours" +'%H:%M')
    
    echo "$new_sunset"
    
    
    per avere 30 min in più ho creato new_sunset, ma mettendo 2:30 hours. Premetto che non sono un guru, sono andato un pò a tentativi

    Grazie ancora
Devi accedere o registrarti per scrivere nel forum
9 risposte