web-dev-qa-db-fra.com

Crontab ne fonctionne pas correctement avec .py

J'essaie de lancer un fichier .py avec crontab à chaque minute, mais cela ne fonctionne pas.

Crontab;

MAILTO="" 
*/1 * * * * /home/TwitterFollowBot/bot.py

Bot.py

#!/usr/bin/env python

from TwitterFollowBot import TwitterBot
my_bot = TwitterBot()

from TwitterFollowBot import TwitterBot
my_bot = TwitterBot("config.txt")  

from TwitterFollowBot import TwitterBot   
my_bot = TwitterBot()
my_bot.sync_follows()

from TwitterFollowBot import TwitterBot    
my_bot = TwitterBot()
my_bot.auto_rt("@ShoutGamers", count=2200)

Chemin;

/home/TwitterFollowBot/bot.py

Journal Crontab;

Traceback (most recent call last):
  File "/home/TwitterFollowBot/bot.py", line 5, in <module>
    my_bot = TwitterBot()
  File "/home/TwitterFollowBot/TwitterFollowBot/__init__.py", line 42, in __init__
    self.bot_setup(config_file)
  File "/home/TwitterFollowBot/TwitterFollowBot/__init__.py", line 78, in bot_setup
    with open(config_file, "r") as in_file:
IOError: [Errno 2] No such file or directory: 'config.txt'
3

Cela fonctionne lorsque vous l'exécutez manuellement car vous l'exécutez probablement à partir du répertoire contenant le fichier config.txt. Votre crontab sera exécutée à partir du répertoire de base de l'utilisateur à qui appartient la crontab. Donc, si vous avez exécuté crontab -e comme utilisateur foo, il recherchera /home/foo/config.txt.

Le correctif le plus simple consisterait à utiliser le chemin complet dans votre script python:

my_bot = TwitterBot("/home/foo/config.txt")  

De plus, votre script a l’air étrange. Pourquoi autant d'importations? Pourquoi réinitier le bot autant de fois? Je ne peux pas le tester, mais êtes-vous sûr de ne pas simplement vouloir:

#!/usr/bin/env python

from TwitterFollowBot import TwitterBot
my_bot = TwitterBot("config.txt")  
my_bot.sync_follows()
my_bot.auto_rt("@ShoutGamers", count=2200)
4
terdon