Недавно я обновил Trac с 0.11.4 до 0.12.2. Я использую следующий сценарий оболочки для резервного копирования установки Trac:
#!/bin/sh
DIR=/root/backup/trac/
NAME=`date +%Y-%m-%d-%H-%M`
cd $DIR
trac-admin /var/trac/projects/myproject/ hotcopy ./temp
tar -zcf TRAC_$NAME.tar.gz -C $DIR/temp .
rm -rf ./temp
Он работает нормально при запуске с консоли, но cronjob не работает со следующим сообщением:
Traceback (most recent call last):
File "/usr/bin/trac-admin", line 5, in <module>
from pkg_resources import load_entry_point
File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 2675, in <module>
parse_requirements(__requires__), Environment()
File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 552, in resolve
raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: Trac==0.11.4
tar: /root/backup/trac//temp: Cannot chdir: No such file or directory
tar: Error is not recoverable: exiting now
Почему он работает при запуске вручную, а не при запуске из crontab? Почему он ищет версию Trac 0.11.4, если я сейчас использую 0.12.2?
Trac был установлен и обновлен с помощью easy_install
.
В заданиях cron рекомендуется использовать полные пути. В противном случае вы можете вызвать неправильный сценарий или программу.
Кроме того, вам необходимо убедиться, что вы выполняете свой скрипт под одним и тем же пользователем.