无法通过 cron 使用 Duplicity 进行备份

无法通过 cron 使用 Duplicity 进行备份

foo.sh我正在尝试通过运行备份脚本cron。代码如下:

#!/bin/bash
export PASSPHRASE=password123
duplicity ../learningbash file://../../../media/kingston
unset PASSPHRASE

然后我在“crontab -e”中添加以下行:

58 07  * * * /home/ashish/learningbash/foo.sh

当我使用 从终端运行它时,它运行完美./foo.sh。但它无法从 运行cron。此外,如果我将“foo.sh”编辑为以下代码,第一行可以从 完美执行cron。但备份脚本不会运行。

#!/bin/bash
touch hello.txt

export PASSPHRASE=bacteria99
duplicity ../learningbash file://../../../media/kingston
unset PASSPHRASE

答案1

这是因为您在脚本中使用了相对路径:

duplicity ../learningbash file://../../../media/kingston

这是从终端进行的,因为您位于正确的目录中,您应该在那里正确地解释相对路径。

cron个人用户将用户的主目录设置为PWD

要解决该问题,请使用绝对路径,例如:

duplicity /bar/learningbash file:///foo/bar/media/kingston

答案2

我最终安装了 expect,并在 localhost 上设置了受信任的 root ssh 登录以使其正常工作。cron 调用 duplicity.expect,其中包含:

#!/usr/bin/expect -f
# run duplicity backups script with a tty
set timeout 7200
spawn ssh -tt localhost /opt/backups/bin/duplicity.sh
expect {
  timeout {
    puts "Connection timed out"
  }
  eof {
    puts "EOF reached"
  }
  "yes/no" {
    send "yes\r"
    exp_continue
  }
}

duplicity.sh 包含要运行的实际 duplicity 备份命令,以及 GPG 将用于加密所有命令的 PASSPHRASE 环境变量。

相关内容