Lo script1 (che ha i permessi da utente) prima di uscire aggiunge al crontab utente un job che lancerà il comando script2 unCertoParametro.
A volte ci sono istanze, più o meno contemporanee, dello script1 che aggiungono ciascuna il proprio job e quindi il crontab diventa di questo tipo
Codice: Seleziona tutto
# ...
*/15 * * * * script2 parametro
*/15 * * * * script2 altroParametro
*/15 * * * * script2 parametroDiverso
# ...
Ecco il problema:
a volte, senza che si sollevi nessun errore, nel crontab ritrovo delle righe residue, non cancellate.
Credo che questo si verifichi quando due diverse istanze di script2 tentano "contemporaneamente" di modificare il crontab.
Non saprei come riprodurre la cosa ma la posso simulare: apro due diversi terminali, eseguo in ciascuno il comando crontab -e faccio modifiche diverse e salvo. Quello che si verifica è che
# apparentemente non c'è un lock file, quando si salva non c'è alcun avviso di errore
# la versione di crontab che rimane è quella salvata per ultima
Scritta in bash, la cancellazione del job sarebbe:
Codice: Seleziona tutto
crontab -l | grep -vF $suoParametro | crontab -
Codice: Seleziona tutto
import shlex
import subprocess
import sys
suoParametro = sys.argv[1]
p1 = subprocess.Popen(shlex.split("crontab -l"), stdout=subprocess.PIPE)
p2 = subprocess.Popen(shlex.split('grep -vF "%s"' %suoParametro),
stdin=p1.stdout,
stdout=subprocess.PIPE)
p1.stdout.close()
subprocess.Popen(shlex.split("crontab -"), stdin=p2.stdout)
Qualsiasi suggerimento/sovvertimento è benvenuto, considerando comunque che il motivo per usare cron invece di un sistema pure Python è garantire la riesecuzione di script2 anche dopo un eventuale riavvio del pc
Grazie per l'attenzione fino a qui.