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:

  1. Прежде всего, убедитесь, что ifupdown установлен:
 apt-get install ifupdown
  1. найти ifdown место расположения:
 which ifdown
  1. Обратитесь к ifdown с абсолютным путем:
#!/bin/bash
echo 'one'
/sbin/ifdown eth1
echo 'two'

Даже если вы используете wpa_cli в качестве задания cron, вам необходимо указать полный путь следующим образом:

/sbin/wpa_cli -i eth1 reconfigure
Другие вопросы по тегам