ifdown в cron bash скрипт не запускается
У меня есть скрипт, который запускается, когда сервер (Ubuntu 14.04) загружается с помощью @reboot в crontab (под пользователем root)
@reboot /bin/bash /root/init.sh >> /var/logs/vminit.log
Сценарий выполняет несколько вещей, но когда он достигает этой строки
ifdown eth1
Скрипт завершается, и ifdown не работает. (Бег ifconfig по-прежнему показывает eth1 в выводе) Включение подробного режима на ifdown тоже ничего не возвращает.
Если я сам запускаю скрипт, он запускается как положено.
Я написал тестовый скрипт, чтобы исключить любые проблемы с init.sh
#!/bin/bash
echo 'one'
ifdown eth1
echo 'two'
Если я запускаю его вручную, я получаю этот вывод (что ожидается)
one
<DHCP Client info>
two
Если я помещу этот тестовый скрипт в crontab для запуска @rebootЯ получаю те же результаты, что и init.shи вывод
one
Я проверил, запустив cron в точное время (Пример: 25 14 * * *), чтобы увидеть, если это что-то с `@reboot', но не повезло.
Я также пытался отложить запуск сценария после загрузки, если что-то блокировало запуск
@reboot /bin/sleep 60; /bin/bash /root/init.sh >> /var/log/vminit.log
Несколько замечаний:
- Eth1 - активный интерфейс, перед запуском ifdown скрипт вызывает eth1 для успешного захвата файла.
- Сценарий запускается от имени пользователя root
- Права доступа к сценарию (и журналу) в порядке.
- Бег init.sh или тестовый скрипт запускается вручную, как и ожидалось.
1 ответ
На самом деле я не знаю почему ifdown не работает с crontab.
В любом случае, я уже давно сталкивался с такой же ситуацией, и у меня есть обходное решение, надеюсь, это поможет вам.
замещать
ifdown eth1
с
/sbin/ifconfig eth1 down 1> /dev/null
Это сработало для меня.
Это сработало для меня, когда я использую ifup или ifdown в crons:
- Прежде всего, убедитесь, что ifupdown установлен:
apt-get install ifupdown
- найти
ifdownместо расположения:
which ifdown
- Обратитесь к ifdown с абсолютным путем:
#!/bin/bash
echo 'one'
/sbin/ifdown eth1
echo 'two'
Даже если вы используете wpa_cli в качестве задания cron, вам необходимо указать полный путь следующим образом:
/sbin/wpa_cli -i eth1 reconfigure