Я пытаюсь настроить ежедневную работу cron, которая выполняет резервное копирование некоторых файлов с помощью borgmatic , но я продолжаю получать ту же ошибку и не могу понять, как ее исправить.
Моя borgmatic
версия:
$ borgmatic --version
1.3.0
Мой /etc/cron.daily/borgmatic
файл:
#!/bin/bash
MAILTO="tomeraberbach@gmail.com"
PATH=$PATH:/usr/local/bin
PYTHONPATH=/home/tomeraberbach/.local/lib/python3.6/site-packages
/usr/local/bin/borgmatic
И его разрешения:
$ ls -l /etc/cron.daily/borgmatic
-rwxr-xr-x 1 root tomeraberbach 162 Apr 8 00:20 /etc/cron.daily/borgmatic*
Однако я продолжаю при выполнении задания появляется следующая ошибка:
/etc/cron.daily/borgmatic:
Traceback (most recent call last):
File "/usr/local/bin/borgmatic", line 7, in <module>
from borgmatic.commands.borgmatic import main
File "/usr/local/lib/python3.6/dist-packages/borgmatic/commands/borgmatic.py", line 22, in <module>
from borgmatic.config import checks, collect, convert, validate
File "/usr/local/lib/python3.6/dist-packages/borgmatic/config/convert.py", line 3, in <module>
from ruamel import yaml
ModuleNotFoundError: No module named 'ruamel'
run-parts: /etc/cron.daily/borgmatic exited with return code 1
Это происходит только в задании cron. Runnning borgmatic
обычно работает нормально.
Кроме того, пакет ruamel
определенно установлен:
$ ls /home/tomeraberbach/.local/lib/python3.6/site-packages/ruamel
yaml/
Есть идеи, почему это происходит? Я знаю, что cron работает в другой среде, но я не уверен, как решить эту проблему.
РЕДАКТИРОВАТЬ:
Изменение строки PYTHONPATH=/home/tomeraberbach/.local/lib/python3.6/site-packages
на export PYTHONPATH=/home/tomeraberbach/.local/lib/python3.6/site-packages
/usr/local/bin/borgmatic
приводит к ошибке сценария по-другому:
/etc/cron.daily/borgmatic:
Traceback (most recent call last):
File "/usr/local/bin/borgmatic", line 7, in <module>
from borgmatic.commands.borgmatic import main
ModuleNotFoundError: No module named 'borgmatic'
run-parts: /etc/cron.daily/borgmatic exited with return code 1
Боргматический автор здесь. Похоже, что borgmatic установлен на системном уровне, а некоторые его зависимости установлены как ваш личный пользователь. Но задание borgmatic cron выполняется от имени пользователя root. Это фундаментальное несоответствие. Поэтому я рекомендую удалить любые боргматические зависимости как ваш личный пользователь и переустановить их как root согласно инструкциям здесь , с или без --user
. Затем, когда вы запускаете задание cron от имени пользователя root, оно должно иметь правильные пути. Если нет, то вы можете попробовать добавить соответствующие пути к вашему PYTHONPATH
, как предложено steeldriver
выше. Потенциально добавляя пути с PYTHONPATH=$PYTHONPATH:/new/path
, если необходимо, чтобы избежать замены существующих путей.