在我的 FreeBSD 服务器上,我使用 Duplicity 设置了一个用于备份的 cron 脚本。此脚本如下:
#!/bin/sh
export PASSPHRASE=
export FTP_PASSWORD=
keyid=
remote=
excludelist=
/usr/local/bin/duplicity --volsize 1000 --max-blocksize=20480 --asynchronous-upload --full-if-older-than 1M --encrypt-key "$keyid" --exclude-filelist "$excludelist" /Data "$remote"
/usr/local/bin/duplicity --force remove-all-but-n-full 1 "$remote"
unset FTP_PASSWORD
unset PASSPHRASE
(当然,敏感数据已被删除)。
此脚本位于 /etc/periodic/daily/duplicity,如果我直接从终端运行它,它会正常工作。但是当 cron/periodic 运行它时,它不起作用,这似乎是因为它env
无法正常运行。
最初,脚本的 hashbang 读取#!/usr/bin/env sh
,但结果却出现错误env: sh: No such file or directory
。因此我将其更改为 sh 的直接路径。
我目前遇到的问题是 duplicity 在内部使用。因此目前,当 cron 尝试运行它时env
,我会收到错误。env: python2: No such file or directory
为什么不可以env
在 cronjobs 中工作?我该如何修复它?
答案1
正如 Amiramix 所暗示的,问题出在环境变量上。更具体地说,是 的值PATH
。
/etc/crontab包含以下行:
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
添加完/usr/local/bin
这些之后,我的脚本就按预期运行了。