Intereting Posts
Как найти идентификатор пользователя после входа в систему как root, используя pmksh? невозможно открыть файл в качестве первого аргумента Самый легкий способ запуска GUI-приложений в Linux? Проблема подключения SMTP в Zenoss («Соединение неожиданно закрыто») Как совместить имя именно с встроенным «Помощью» Bash? Как вы выполняете псевдоним или функцию, которая сохраняет вкладку? Как заменить последнее появление персонажа? Может ли путь -prefix быть таким же, как каталог, в который я загрузил / распаковал исходный код? Devilspie2 только обнаруживает окна Firefox при перезагрузке; Как я могу это исправить? Соединение r8168 случайно падает как вернуть md5deep pwd не задан правильно в запросе zsh Копирование и расширение разделов Оптимизирует ли размер для уменьшения использования памяти во время выполнения, а также двоичный размер? Как подключить мой домен со связыванием в реальном www

ipset не выполняется из crontab

У меня есть txt-файлы, содержащие IP-адреса, по одному на строку файла, которые я хочу заблокировать с помощью ipset.

У меня есть этот скрипт bash, который по существу читает из простого текстового файла и создает массив. Затем он выполняет итерацию элементов массива и добавляет каждый из них в ipset, который я создал для этой цели.

Проблема в том, что: если я выполняю сценарий вручную с терминала, он работает отлично, но когда я добавляю скрипт для периодического запуска с помощью crontab, сценарий запускается, но IP-адреса не добавляются в ipset.

Это важная часть скрипта.

index=0 while true; do ipset -quiet -A myIpset $[arrayOfIPS[$index]} index=$[$index + 1] if [ "$index" -gt "$lastIndexOfArray" ]; then break fi done 

Это отлично работает с терминалом, но не работает из задачи crontab. Зачем?

Ваша оболочка знает, где искать исполняемые файлы (например, ipset ), просматривая вашу PATH , которая задана вашей средой. cron не использует одну и ту же среду. Добавление этого в начало crontab (или вашего скрипта) должно указывать, где найти команды, как вы ожидаете:

 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 

Я знаю, что ответ другой, но есть ли причина, по которой вы не используете встроенные команды?

например, это crontab

 @reboot /usr/sbin/ipset restore -f /ip/ipall.txt 

а также

 ipset save -f /ip/ipall.txt