Я пытаюсь запустить скрипт резервного копирования 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
Поэтому Вы использовали относительные пути в своем сценарии:
duplicity ../learningbash file://../../../media/kingston
Это работает от терминала, потому что Вы были в корректном каталоге, где необходимо быть должны интерпретировать относительные пути правильно.
cron
из отдельного пользователя устанавливает корневой каталог пользователя как PWD
.
Для решения проблемы используйте полный путь, например:
duplicity /bar/learningbash file:///foo/bar/media/kingston
Я закончил тем, что установил, ожидают, и установка доверяемого корня ssh логины на localhost для создания этой работы. крон называет 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 содержит фактические команды резервного копирования двуличности для выполнения, и переменная ENV ПАРОЛЯ, которую GPG будет использовать для шифрования их всех.
pacmd list-cards
– Xavier Rossich Prades 8 May 2017 в 17:00