2017-04-03 2 views
0

J'ai écrit un petit script python pour automatiser le processus d'ajout d'emplois à crontab, mais le travail supplémentaire via le script ne fonctionne pas et même travail lorsqu'il est donné travail manuellement fincode python pour ajouter des emplois à crontab ne fonctionne pas

EST ICI CODE:

#!/usr/bin/python3 

def scheduler(time=["*","*","*","*","*"],message="no message set"): 
crontab_pointer=open('/var/spool/cron/crontabs/sky','a') 
schedule_string="\n"+" ".join(time)+" "+message+"\n" 
crontab_pointer.write(schedule_string) 
crontab_pointer.close() 


if __name__=="__main__": 
scheduler(time=["52","18","*","*","*"],message="env DISPLAY=:0 /home/sky/scripts/notify2.sh") 

Répondre

0

Permission

Assurez-vous que l'utilisateur que vous utilisez votre script python en tant que root. J'ai fait des tests rapides et les autres utilisateurs ne peuvent pas accéder à leurs fichiers/var/spool/cron/crontabs/$. C'est par conception si je peux me rappeler correctement. Vous êtes censé utiliser la commande crontab -e pour éditer votre crontab.

sudo python editcron.py

Vraiment, le Python que vous avez écrit est pas tout à fait tort. Il ouvre le fichier, ajoute la chaîne, puis la ferme. Rien de révolutionnaire ici. Je viens d'ajouter quelques vérifications du système de fichiers pour m'assurer que vous pouvez accéder à ce fichier.

code

import os 

def scheduler(time=['*', '*', '*', '*', '*'], message='no message set', username='sky'): 
    crontab_fn = '/var/spool/cron/crontabs/{!s}'.format(username) 
    if not os.path.exists(crontab_fn): 
     raise StandardError("File {} missing".format(crontab_fn)) 
    if not os.access(crontab_fn, os.W_OK): 
     raise StandardError("Cannot write to file, run as root") 
    crontab_fh = open(crontab_fn, 'a') 
    schedule_string = "\n{t:s} {m:s}\n".format(
     t=' '.join(time), 
     m=message 
    ) 
    crontab_fh.write(schedule_string) 
    crontab_fh.close() 

if __name__ == "__main__": 
    time = ["52","18","*","*","*"] 
    message = "env DISPLAY=:0 /home/sky/scripts/notify2.sh" 
    scheduler(time, message) 
0

NOTES de Cron homme:
Cron recherche de sa zone de spool (/ var/spool/cron/crontab) pour les fichiers crontab (qui sont nommés après les comptes en /etc/passwd); crontabs trouvés sont chargés en mémoire. Notez que crontabs dans ce répertoire ne doit pas être directement accessible - la commande crontab doit être utilisé pour accéder et les mettre à jour.


Question: ... même travail manuellement lorsqu'il est administré de travail bien

Je suppose que vous utilisez crontab <filename> ici!


Rechercher un python module ou utiliser module subprocess.run(...) pour démarrer crontab <filename> à partir de votre .py.

using-the-subprocess-module

Revenez Drapeau votre question a répondu si cela fonctionne pour vous ou pourquoi ne pas commenter.