[bash] Как запустить gpg из скрипта, выполняемого cron?


Answers

В моем случае gpg can not find home dir для использования ключей:

gpg: секретный ключ по умолчанию: никакой секретный ключ

gpg: 0003608.cmd: знак + шифрование не удалось: нет секретного ключа

Поэтому я добавил --homedir /root/.gnupg . Окончательная команда может выглядеть так:

echo 'password' | gpg -vvv --homedir /root/.gnupg --batch --passphrase-fd 0 --output /usr/share/file.gpg --encrypt --sign /usr/share/file.tar.bz2

Question

У меня есть скрипт, который имеет часть, которая выглядит так:

for file in `ls *.tar.gz`; do
  echo encrypting $file
  gpg --passphrase-file /home/$USER/.gnupg/backup-passphrase \
    --simple-sk-checksum -c  $file
done

По какой-то причине, если я запускаю этот скрипт вручную, он отлично работает и все файлы зашифрованы. Если я запускаю это как задание cron, echo $file работает отлично (я вижу «шифрование <файл>» в журнале), но файл не получает зашифрованный и gpg молчат с ошибкой без вывода stdout / stderr.

Любые подсказки?




Задачи @skinp Cron выполняются sh, тогда как большинство современных Unix используют bash или ksh для интерактивных логинов. Самая большая проблема (по моему опыту) заключается в том, что sh не понимает таких вещей, как:

export PS1='\u@\h:\w> '

который необходимо изменить на:

PS1='\u@\h:\w> '
export PS1

Поэтому, если cron запускает сценарий оболочки, который определяет переменную среды с использованием первого синтаксиса, перед запуском какой-либо другой команды другая команда никогда не будет выполнена, потому что sh bombs out пытается определить переменную.




убедитесь, что пользователь, выполняющий задание cron, имеет разрешения, необходимые для шифрования файла.




Links