Message d'erreur dans le log de CRON

Bonjour,

Mon blog est généré via Pelican.
J’écris mes articles dans “/home/user/blog/content/” et j’appelle ensuite Pelican pour envoyer ça vers “/var/www/monvirtualhost/blog/”.

J’ai donc fait un alias pour ça:

alias peli='pelican /home/user/blog/content/ -o /var/www/monvirtualhost/blog/ -s /home/user/blog/pelicanconf.py'

Mon alias fonctionne bien, je peux l’appeler sans problème et il génère bien le site:

$ peli
Done: Processed 4 articles, 0 drafts, 2 pages and 0 hidden pages in 0.44 seconds.

J’ai du coup voulu faire un CRON pour automatiser tout ça :

$ crontab -e
(...)    
*/10 * * * * peli

Et ça ne fonctionne pas! J’ai un message d’erreur dans “/var/log/syslog” :

# cat /var/log/syslog | grep CRON
Mar 25 17:28:01 Marvin CRON[10801]: (simon) CMD (user)
Mar 25 17:28:01 Marvin CRON[10800]: (CRON) info (No MTA installed, discarding output)

Je ne comprends pas… Pourtant, si je lance crontab en tant que “user”, il doit avoir les mêmes droits et donc pouvoir faire la même chose, non ?

Si vous aviez une piste pour moi… :slight_smile:

Bonjour,

Tu as essayé d’entrer la commande complète dans cron plutôt que son alias ?

MTA
Cron ne peut pas envoyer de mail dans /var/mail/user
Je ne pense pas que ce soit la raison du dysfonctionnement.

Bonjour @jul,

Merci pour ta réponse. :slight_smile:

Oui, j’ai tout d’abord essayé avec la commande complète, j’ai le même problème. Si le message “No MTA installed (…)” signifie qu’il ne sait pas envoyer de mail, ça veut dire qu’il essaye d’envoyer la raison de l’erreur par mail ? N’y a-t-il pas moyen de la récupérer autrement ?

Installe un MTA, tu verras bien genre exim4.

Je vais essayer ça. Sinon, j’ai trouvé une autre piste : rajouter une redirection vers un fichier quelconque :

$ crontab -e
(...)    
*/10 * * * * peli > /tmp/log-peli 2>&1

Je reviens expliquer ce que j’ai fait quand j’ai une minute.

J’ai compris d’où venait le problème. J’ai modifié le crontab pour envoyer l’erreur vers un fichier de log dans /tmp/ :

$ crontab -e
# */5 * * * * peli > /tmp/log-peli 2>&1
*/5 * * * * pelican /home/user/blog/content/ -o /var/www/monvirtualhost/blog/ -s /home/user/blog/pelicanconf.py > /tmp/log-peli 2>&1

Ce qui donne (avec l’alias puis sans l’alias) :

# tail -f /tmp/log-peli
/bin/sh: 1: peli: not found
tail: /tmp/log-peli: file truncated
/bin/sh: 1: pelican: not found

Mais, pourquoi ne trouve-t-il pas Pelican ? Parce qu’il est dans /usr/local/bin !

$ whereis pelican
pelican: /usr/local/bin/pelican

J’ai modifié crontab pour qu’il aille le chercher au bon endroit :

$ crontab -e
*/5 * * * * /usr/local/bin/pelican /home/user/blog/content/ -o /var/www/monvirtualhost/blog/ -s /home/user/blog/pelicanconf.py > /tmp/log-peli 2>&1

Et je me retrouve avec une autre erreur :

$ tail -f /tmp/log-peli 
/bin/sh: 1: pelican: not found
tail: /tmp/log-peli: file truncated
Traceback (most recent call last):
  File "/usr/local/bin/pelican", line 11, in <module>
    sys.exit(main())
  File "/usr/local/lib/python2.7/dist-packages/pelican/__init__.py", line 386, in main
    pelican, settings = get_instance(args)
  File "/usr/local/lib/python2.7/dist-packages/pelican/__init__.py", line 372, in get_instance
    settings = read_settings(config_file, override=get_config(args))
  File "/usr/local/lib/python2.7/dist-packages/pelican/settings.py", line 141, in read_settings
    local_settings = get_settings_from_file(path)
  File "/usr/local/lib/python2.7/dist-packages/pelican/settings.py", line 193, in get_settings_from_file
    module = load_source(name, path)
IOError: [Errno 2] No such file or directory

Et me…e! Décidément, c’est pas évident. Je peux comprendre que cron ne va pas chercher dans /usr/local/bin/ mais pourquoi ne fonctionne-t-il pas quand je pointe au bon endroit alors que ça marche si bien quand je le lance avec mon utilisateur courant ? :persevere:

[Edit: Le con… J’ai mis vraiment dans mon crontab cette ligne :

$ crontab -e
*/5 * * * * /usr/local/bin/pelican /home/user/blog/content/ -o /var/www/monvirtualhost/blog/ -s /home/user/blog/pelicanconf.py > /tmp/log-peli 2>&1

Or, mon utilisateur courant ne s’appelle évidemment pas “user”… J’ai corrigé avec le bon nom d’utilisateur et le nom de mon virtualhost et tada!, ça marche!

$ tail -f /tmp/log-peli
Done: Processed 6 articles, 0 drafts, 2 pages and 0 hidden pages in 0.66 seconds.

:slight_smile: