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 ? 
[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.
