我正在尝试设置一个每日 cron 作业,使用以下方法备份一些文件博格马蒂,但我一直收到同样的错误,并且无法弄清楚如何修复它。
我的borgmatic
版本:
$ borgmatic --version
1.3.0
我的/etc/cron.daily/borgmatic
文件:
#!/bin/bash
MAILTO="[email protected]"
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 作业中发生。运行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
答案1
borgmatic 作者在这里。看起来 borgmatic 是在系统级别安装的,并且它的一些依赖项是以您的个人用户身份安装的。但 borgmatic cron 作业是以 root 身份运行的。这是根本的不匹配。所以我的建议是以您的个人用户身份卸载任何 borgmatic 依赖项,然后以 root 身份重新安装它们按照此处的说明,带或不带--user
。然后,当您以 root 用户身份运行 cron 作业时,它应该希望所有内容都在正确的路径中。如果没有,那么您可以尝试PYTHONPATH
按照steeldriver
上面的建议将相关路径添加到您的路径中。可能追加如果需要,可以使用 .path 来PYTHONPATH=$PYTHONPATH:/new/path
避免替换现有路径。