Intereting Posts
Могу ли я принудительно установить удаление пакета из yum repo? Может ли кто-нибудь объяснить вывод mount? Какие файлы необходимо удалить перед дублированием виртуальной машины? Убедитесь, что клиент torrent использует openvpn Использование bash для переформатирования «#include» в списке файлов с использованием regex Есть ли способ перенаправить запросы от foo.com на виртуальную машину на этом сервере? что является хорошим инструментом для восстановления файлов в их пути, когда вы rm -r от root? Уязвимость Postgres через общедоступную схему? Опция отключения Linux Mint 17.1 не работает Есть ли способ скомбинировать два файла? Использование sed для консолидации разностного вывода Разница в правильной конфигурации для Windows UART VS Linux UART Что такое .in файлы? Использование родного разрешения 1366 x 768 в Lenovo Ideapad Игнорировать изменения пробелов во всех командах git

dpkg-reconfigure: не найден при работе в cron

У меня есть виртуальный сервер (debian), и часы не синхронизируются время от времени (возможно, потому, что я сохраняю / восстанавливаю состояние с помощью vboxheadlesstray).

Чтобы исправить эту проблему, я запускаю dpkg-reconfigure ntp && ntpq -p , она работает, когда я запускаю ее как root, но не работает с cron. Я добавил его в crontab -e (как пользователь root) и использует эту строку:

 1 * * * * dpkg-reconfigure ntp && ntpq -p > /dev/null 2>&1 

Мой обычный пользовательский пользователь получает почту об этом. /bin/sh: 1: dpkg-reconfigure: not found , почему мой обычный пользователь получает почту, а не root и что мне нужно изменить, чтобы заставить ее работать?

В Debian dpkg-reconfigure находится под /usr/sbin , а root явно имеет его в $ PATH, но cron ограничивает $PATH /usr/bin:/bin , даже для root.
См. Man 5 crontab:

 Several environment variables are set up automatically by the cron(8) daemon. SHELL is set to /bin/sh, and LOGNAME and HOME are set from the /etc/passwd line of the crontab's owner. PATH is set to "/usr/bin:/bin". HOME, SHELL, and PATH may be overridden by settings in the crontab; LOGNAME is the user that the job is running from, and may not be changed. 

Таким образом, вам придется изменить свой crontab:

  • давая полный путь:
    1 * * * * /usr/sbin/dpkg-reconfigure ntp && ntpq -p > /dev/null 2>&1
  • или с измененным $ PATH:
    PATH=/usr/bin:/bin:/usr/sbin
    1 * * * * dpkg-reconfigure ntp && ntpq -p > /dev/null 2>&1

Это сработало бы, но это было бы нечисто: p
Вы должны следовать рекомендациям выше, если у вас есть рабочий демон ntp, или просто поставьте это задание:
10 * * * * /usr/sbin/ntpdate &>/dev/null

Еще лучше добавьте следующее в ntp.conf

 tinker panic 0 

Таким образом, вам не нужно перезапускать ntp (что плохо).

dpkg-reconfigure находится в /usr/sbin/ в моей системе:

 martin@martin ~ % which dpkg-reconfigure /usr/sbin/dpkg-reconfigure 

Проверьте переменную PATH в своем crontab, возможно, она отсутствует в каталоге /usr/sbin/ ?

Кроме того, использование dpkg-reconfigure только для того, чтобы заставить NTP повторно установить время, не кажется особенно хорошей идеей, а ntpq -p > /dev/null 2>&1 , похоже, ничего полезного не делает. Согласно man-странице, -p просто перечисляет одноранговые узлы, поэтому запуск этого процесса и вывод его в /dev/null должны практически ничего не делать.

Почему бы вам просто не запустить /etc/init.d/ntp restart > /dev/null из вашего crontab?