В чем проблема с привилегиями cron? - PullRequest
0 голосов
/ 13 февраля 2020

Когда я запускаю сценарий BASH из командной строки, он выполняется. Когда я пытаюсь запустить его как задачу cron, она терпит неудачу. По методу исключения я обнаружил проблему. Он заключается в том, что команда which iptables возвращает пустую строку. Это происходит со всеми программами, которые я пытаюсь найти в каталоге "/ sbin". Пример:

# crontab -e
* * * * * /root/test.sh >> /root/test.log 2>&1

test. sh

#!/bin/bash
IPT=$(which iptables);
echo ${IPT} >> /root/test.log

Но в test.log записана пустая строка. Протестировано на Ubuntu 16.04 и Debian 8.

1 Ответ

2 голосов
/ 13 февраля 2020

Это не относится к привилегиям.

which ищет команду в $PATH. cron Сценарии имеют ограниченный путь, который не включает iptables, поэтому он не найден.

 $ /usr/bin/which iptables
/sbin/iptables
 $ PATH=/bin:/usr/bin /usr/bin/which iptables
 $ echo $?
1

Если у вас ограниченный путь, он вернет пустую строку (на моем другом компьютере он сообщает, что никаких iptables в (/ usr / bin: / bin) нет, поэтому YMMV) и завершается с ненулевым кодом.

если вы сделаете что-то вроде echo $PATH >> /root/test.log, вы увидите, что cron имеет путь с просто /usr/bin и /bin

Вы должны либо установить $PATH, чтобы содержать iptables или используйте полный путь при вызове iptables

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...