LINUX.ORG.RU
ФорумAdmin

GPG не работает через crontab

 ,


0

1

Добрый день,камрады!
Столкнулся с проблемой запуска GPG через cron.
Имеется скрипт, который экспортирует lxd-контейнер в имэйдж,
шифрует его с помощью gpg(симметричным алгоритмом) и отправляет в облако.
Так вот. Если запускать скрипт из терминала - все прекрасно отрабатывает.
Через крон - ни в какую(
GPG не запускается.
Задание создаю через файл /etc/crontab.

Сама строчка скрипта:

cat /root/pass.txt | gpg -c --passphrase-fd 0  $WORKDIR/$LXCCONTAINER-BACKUP-$BACKUPDATE-IMAGE.tar.gz


Запись в /etc/crontab:
55 * * * * root lxdtocloud web

Как ты проверял, какие значения у всех этих переменных окружения и переменной PATH во время выполнения задания?

blexey ★★★★★
()
Ответ на: комментарий от blexey

какие необходимо задать переменные для корректной работы скрипта?

И как проконтролировать?

Если разница в выполнении sudo script и запуск крипта из crontaba от root ?

HerrMamont
() автор топика
Ответ на: комментарий от HerrMamont

Все переменные из приведенной тобой команды + PATH.

Задание крона получает в своём окружении ровно столько, сколько ты укажешь.

Проверить это очень просто - вместо твоей строчки скрипта укажи в задании крона что-то типа следующего:

0 * * * * declare -p | grep -E "\ (WORKDIR|LXCCONTAINER|BACKUPDATE|PATH)=" >/tmp/myenv.txt
И смотри, что там видно в выхлопе /tmp/myenv.txt.

Для кронджобов, обычно, рекомендуют задавать переменные в $HOME/.profile и добавлять к вызову что-то вроде:
0 * * * * . $HOME/.profile; /path/to/command/to/run
Или прямо в вызываемый скрипт.

blexey ★★★★★
()
Последнее исправление: blexey (всего исправлений: 1)

Полные пути.

anc ★★★★★
()
Ответ на: комментарий от blexey

ОК, переменные, задаваемые в скрипте, смысла нет проверять - они работаю.
То есть, если выкинуть из скрипта строчку с gpg, то все отрабатывает на ура.
В порядке эксперимента поместил в /usr/bin скрипт testenc со следующим содержимым:

#!/bin/bash

echo $1 | /usr/bin/gpg -c --passphrase-fd 0 /path/to/file.txt

В /etc/crontab задание следующего типа:

55 * * * * root testenc 1234

Аналогично - если запускать ручками из терминала, то работает, из cron'а нет(((

Для ясности, если скрипто из планировщика должен отрабатывать от имени root,
то в путе к профилю указавать следует тоже каталог root? или текущего пользователя?

HerrMamont
() автор топика
Ответ на: комментарий от HerrMamont
0 * * * * /usr/bin/echo "$WORKDIR/$LXCCONTAINER-BACKUP-$BACKUPDATE-IMAGE.tar.gz" >/tmp/myenv.txt

строит нужный путь и имя?

Для заданий крон нужно обеспечить правильное окружение - пути и остальные необходимые переменные.

Есть куча способов разной степени правильности, от замены и настройки рабочего шелла для задания, до дублирования всех нужных переменных прямо в вызываемом скрипте.

Если скрипт должен отрабатывать от имени рута, очевидно, его следует поместить в кронтаб рута. И это не отменяет необходимости в построении окружения. Указание полных путей при этом - лишь один из шагов и вариантов.

blexey ★★★★★
()
Последнее исправление: blexey (всего исправлений: 1)
Ответ на: комментарий от HerrMamont

Перенаправь выхлоп gpg в какой-нибудь файл. И на всякий случай еще добавь опцию -vv или -vvv.

blexey ★★★★★
()
Ответ на: комментарий от HerrMamont

у меня работает:

*/5 * * * *    echo aa | gpg --no-tty -c --passphrase-fd 0 /tmp/passwd > /tmp/passwd.log 2>&1

результат:

# ls -alF /tmp/passwd*
-rw-r--r--. 1 arto  arto  3180 Dec 12 07:32 /tmp/passwd
-rw-r--r--. 1 root  root  1334 Dec 12 07:35 /tmp/passwd.gpg
-rw-r--r--. 1 root  root     0 Dec 12 07:35 /tmp/passwd.log

добавте log-файл и посмотрите в него

arto ★★
()
Ответ на: комментарий от arto

Тоже не сработало.
Лог даже не появился.
Пробовал

27 * * * *<---->root echo aa | gpg --no-tty -c --passphrase-fd 0 /path/to/file.txt > /path/to/log.log 2>&1

и

#!/bin/bash

    echo $1 | /usr/bin/gpg -c --no-tty --no-use-agent --passphrase-fd 0 /path/to/file.txt > /path/to/log.log 2>&1

ни так,ни этак((

HerrMamont
() автор топика
Ответ на: комментарий от HerrMamont

Подозреваю, что шелл, который у тебя используется для заданий крон, не понимает всей твоей командной строки.
Часто там используется sh, а в сеансе пользователя - bash.

Попробуй спрятать её в скрипт с явным указанием в шебанге #!/bin/bash.
И все дальнейшие исследования переменных окружения проводить также внутри него.

blexey ★★★★★
()
Ответ на: комментарий от blexey

Так в скрипте и так явно указан #!/bin/bash !!
К тому же, если бы в скроне использовался sh,
то задание шифрования, заведенное прямо в кронтаб должно было сработать...

HerrMamont
() автор топика
Ответ на: комментарий от HerrMamont

Значит дело в самом gpg. Какая у тебя версия? У меня 2.2.3 вот так работает.
Ну и тут приведены более секурные варианты, чем по первой ссылке.

blexey ★★★★★
()
Ответ на: комментарий от HerrMamont

1. Смотрите логи крона
2. selinux, apparmor, etc.
3. чисто случайно вы рута не «выключали» ? А то ту недавно тема была.

anc ★★★★★
()
Ответ на: комментарий от arto

вопрос был не в том, какую магию использует крон,а в том, sh или bash

HerrMamont
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.