На моем сервере FreeBSD я установил сценарий cron для резервного копирования с использованием Duplicity. Этот сценарий выглядит следующим образом:
#!/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 / periodical / daily / duplicity и отлично работает, если я запускаю его прямо с терминала. Но он не работает, когда его запускает cron / periodical, и, похоже, это связано с тем, что env
работает некорректно.
Изначально хэш-код сценария читался как #! / Usr / bin / env sh
, но это привело к ошибке env: sh: Нет такого файла или каталога
. Поэтому я изменил его на прямой путь sh.
Проблема, с которой я столкнулся сейчас, заключается в том, что двойственность использует env
внутри. В настоящее время я получаю сообщение об ошибке env: python2: Нет такого файла или каталога
, когда cron пытается его запустить.
Почему env
не работает внутри cronjobs, и как я могу это исправить?
Как намекнул Amiramix, проблема была в среде переменные. В частности, значение PATH
.
/ etc / crontab содержало следующую строку:
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
После того, как я добавил к нему / usr / local / bin
, мой сценарий работал, как ожидалось.