Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Ubuntu server, перезапуск сервиса приложением  (Прочитано 4245 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн YDenis

  • Автор темы
  • Активист
  • *
  • Сообщений: 617
    • Просмотр профиля
Здравствуйте.
Подскажите пожалуйста. Ubuntu server 16.04, установлен сервер умного дома мажордомо. Нужно по команде мажордомо (скрипт) перезапускать сервисы мажора: service majordomo restart.

Скрипт на мажордомо:
Код: (php) [Выделить]
echo shell_exec( 'sudo /var/www/restart.sh' );
Код в restart.sh:
#!/bin/bash

service majordomo restart

Через мажордомо перезапуск не запускается.
Вручную в терминале ubuntu запускаю: service majordomo restart, требует авторизацию. После ввода пароля сервис рестартует.
Если в терминале запустить: sudo /var/www/restart.sh, то ругается:
sudo: /var/www/restart.sh: команда не найдена
Хотя файл такой в наличии.

Плиз, что я делаю неверно?

благодарю

Оффлайн The Green Side

  • Старожил
  • *
  • Сообщений: 1177
    • Просмотр профиля
Re: Ubuntu server, перезапуск сервиса приложением
« Ответ #1 : 24 Апреля 2019, 16:57:15 »
Если в терминале запустить: sudo /var/www/restart.sh, то ругается:
sudo: /var/www/restart.sh: команда не найдена
Хотя файл такой в наличии.
Плиз, что я делаю неверно?

На этот вопрос я не смогу ответить, но я бы на вашем месте настроил себе разрешение на выполнение sudo service majordomo restart без ввода пароля. Подробнее здесь. Затем алиас на эту команду в .bashrc, чтобы не вводить её каждый раз целиком. Так должно работать.
Debian 11, Debian 11 Server

Оффлайн YDenis

  • Автор темы
  • Активист
  • *
  • Сообщений: 617
    • Просмотр профиля
Re: Ubuntu server, перезапуск сервиса приложением
« Ответ #2 : 24 Апреля 2019, 17:42:25 »
сенк, помогло.

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: Ubuntu server, перезапуск сервиса приложением
« Ответ #3 : 24 Апреля 2019, 18:18:15 »
YDenis,

Цитировать
Код в restart.sh:

какая пользователя?
например www-data.
U=www-data
echo "$U ALL=(ALL) NOPASSWD:`which restart.sh`" | sudo tee /etc/sudoers.d/90-cloudimg-$U
sudo reboot

Wars ~.o

Оффлайн YDenis

  • Автор темы
  • Активист
  • *
  • Сообщений: 617
    • Просмотр профиля
Re: Ubuntu server, перезапуск сервиса приложением
« Ответ #4 : 30 Апреля 2019, 03:59:19 »
U=www-data
echo "$U ALL=(ALL) NOPASSWD:`which restart.sh`" | sudo tee /etc/sudoers.d/90-cloudimg-$U
sudo reboot
сенк

Оффлайн YDenis

  • Автор темы
  • Активист
  • *
  • Сообщений: 617
    • Просмотр профиля
Добрый.
Что-то запутался. Мне нужно чтобы веб-ресурс под апачем в Ubuntu сервер (пользователь www-data) запускал команду:
Код: (bash) [Выделить]
sudo service majordomo restart
Что сделал: в /var/www/ лежит файл restart.sh с содержимым:
Код: (bash) [Выделить]
#!/bin/bash

U=www-data
echo "$U ALL=(ALL) NOPASSWD:`which restart.sh`" | sudo tee /etc/sudoers.d/90-cloudimg-$U
sudo service majordomo restart

Соответственно в веб-ресурсе (умный дом мажордомо) есть скрипт с содержимым:
Код: (bash) [Выделить]
//перезагрузка циклов
echo shell_exec( 'sudo /var/www/restart.sh' );

Не хотят эти циклы запускаться. Хотя если непосредственно через консоль ubuntu снести:
Код: (bash) [Выделить]
sudo service majordomo restartвсе замечательно срабатывает.

Что я неверно делаю? Запутался в край

благодарю
« Последнее редактирование: 08 Мая 2019, 15:25:36 от Azure »

Оффлайн The Green Side

  • Старожил
  • *
  • Сообщений: 1177
    • Просмотр профиля
U=www-data
echo "$U ALL=(ALL) NOPASSWD:`which restart.sh`" | sudo tee /etc/sudoers.d/90-cloudimg-$U

Это нужно было всего 1 раз выполнить, а не каждый раз при перезапуске.
Здесь мы добавляем права пользователю www-data на перезапуск сервиса без ввода пароля.
А в скрипте должно быть:
#!/bin/bash

sudo -u www-data service majordomo restart

То есть рестарт запускаем не от админа, а от имени пользователя www-data

Если не сработает, покажите содержание файла /etc/sudoers.d/90-cloudimg-www-data
Debian 11, Debian 11 Server

Оффлайн YDenis

  • Автор темы
  • Активист
  • *
  • Сообщений: 617
    • Просмотр профиля
yууу@mjd:~$ /etc/sudoers.d/90-cloudimg-www-data
-bash: /etc/sudoers.d/90-cloudimg-www-data: Отказано в доступе
yууу@mjd:~$ sudo /etc/sudoers.d/90-cloudimg-www-data
>>> /etc/sudoers.d/90-cloudimg-www-data: ошибка синтаксиса near line 1 <<<
sudo: parse error in  near line 1
sudo: no valid sudoers sources found, quitting
sudo: не удаётся инициализировать модуль политики

« Последнее редактирование: 08 Мая 2019, 15:26:50 от Azure »

Оффлайн The Green Side

  • Старожил
  • *
  • Сообщений: 1177
    • Просмотр профиля
sudo cat /etc/sudoers.d/90-cloudimg-www-data
Debian 11, Debian 11 Server

Оффлайн YDenis

  • Автор темы
  • Активист
  • *
  • Сообщений: 617
    • Просмотр профиля
Код: (html5) [Выделить]
yyyy@mjd:~$ sudo cat /etc/sudoers.d/90-cloudimg-www-data
>>> /etc/sudoers.d/90-cloudimg-www-data: ошибка синтаксиса near line 1 <<<
sudo: parse error in  near line 1
sudo: no valid sudoers sources found, quitting
sudo: не удаётся инициализировать модуль политики
yyyy@mjd:~$


Пользователь добавил сообщение 08 Мая 2019, 13:47:17:
U=www-data
echo "$U ALL=(ALL) NOPASSWD:`which restart.sh`" | sudo tee /etc/sudoers.d/90-cloudimg-$U

Это нужно было всего 1 раз выполнить, а не каждый раз при перезапуске.
Здесь мы добавляем права пользователю www-data на перезапуск сервиса без ввода пароля.

Я верно выполнил?

Код: (html5) [Выделить]
yyyy@mjd:~$ U=www-data
yyyy@mjd:~$ echo "$U ALL=(ALL) NOPASSWD:`which restart.sh`" | sudo tee /etc/sudoers.d/90-cloudimg-$U
>>> /etc/sudoers.d/90-cloudimg-www-data: ошибка синтаксиса near line 1 <<<
sudo: parse error in  near line 1
sudo: no valid sudoers sources found, quitting
sudo: не удаётся инициализировать модуль политики
« Последнее редактирование: 08 Мая 2019, 15:28:21 от Azure »

Оффлайн The Green Side

  • Старожил
  • *
  • Сообщений: 1177
    • Просмотр профиля
Файл /etc/sudoers.d/90-cloudimg-www-data содержит некорректный синтаксис, работа команды sudo в данный момент невозможна.
Если у вас установлен пароль для пользователя root, то вы сможете удалить некорректный файл (а перед этим ради интереса посмотреть его содержимое):
su
cat /etc/sudoers.d/90-cloudimg-www-data
rm /etc/sudoers.d/90-cloudimg-www-data

Если пароль пользователя root не установлен, проще всего на мой взгляд будет загрузиться с live флешки, примонтировать системный диск (можно в программе с графическим интерфейсом, типа GNOME Disks), посмотреть точку монтирования, которая была ему назначена.
Затем в терминале:
su
cd /media/user/... #здесь указываем точку монтирования системного диска вместо /media/user/...
rm etc/sudoers.d/90-cloudimg-www-data #обратите внимание, здесь без слэша в начале, т.к. используем относительный путь

Пользователь добавил сообщение 08 Мая 2019, 14:01:13:
Я верно выполнил?

yyyy@mjd:~$ U=www-data
yyyy@mjd:~$ echo "$U ALL=(ALL) NOPASSWD:`which restart.sh`" | sudo tee /etc/sudoers.d/90-cloudimg-$U

Вы верно выполнили, но результат выполнения, возможно, был не верным.
Не запускайте повторно restart.sh, пока не удалите из него эту команду.
« Последнее редактирование: 08 Мая 2019, 14:01:13 от m-svo »
Debian 11, Debian 11 Server

Оффлайн YDenis

  • Автор темы
  • Активист
  • *
  • Сообщений: 617
    • Просмотр профиля
Если у вас установлен пароль для пользователя root, то вы сможете удалить некорректный файл (а перед этим ради интереса посмотреть его содержимое):
Код: [Выделить]
su
cat /etc/sudoers.d/90-cloudimg-www-data
rm /etc/sudoers.d/90-cloudimg-www-data

su: Сбой при проверке подлинности


Пользователь добавил сообщение 08 Мая 2019, 14:04:48:
Вы верно выполнили, но результат выполнения, возможно, был не верным.
Не запускайте повторно restart.sh, пока не удалите из него эту команду.

Я видимо что то сломал:
Код: (html5) [Выделить]
yyyy@mjd:~$ sudo mc
>>> /etc/sudoers.d/90-cloudimg-www-data: ошибка синтаксиса near line 1 <<<
sudo: parse error in  near line 1
sudo: no valid sudoers sources found, quitting
sudo: не удаётся инициализировать модуль политики

Ранее файловый менеджер запускался
« Последнее редактирование: 08 Мая 2019, 15:29:16 от Azure »

Оффлайн The Green Side

  • Старожил
  • *
  • Сообщений: 1177
    • Просмотр профиля
Вам как удобнее восстановить систему, через режим восстановления или путём загрузки с Live флешки?
Debian 11, Debian 11 Server

Оффлайн YDenis

  • Автор темы
  • Активист
  • *
  • Сообщений: 617
    • Просмотр профиля

Оффлайн The Green Side

  • Старожил
  • *
  • Сообщений: 1177
    • Просмотр профиля
Тогда: загрузиться с флешки, примонтировать системный диск (можно в программе с графическим интерфейсом, типа GNOME Disks), посмотреть точку монтирования, которая была ему назначена.
Затем в терминале:
su
cd /media/user/... #здесь указываем точку монтирования системного диска вместо /media/user/...
rm etc/sudoers.d/90-cloudimg-www-data #обратите внимание, здесь без слэша в начале, т.к. используем относительный путь

И на будущее: если вносим изменения в файл /etc/sudoers то только командой sudo EDITOR=nano visudoАналогично с папкой /etc/sudoers.d/ там будет, например, так: sudo EDITOR=nano visudo -f /etc/sudoers.d/90-test-file
Если делать так, то подобной проблемы никогда не будет, visudo проверяет синтаксис файла перед сохранением.
Debian 11, Debian 11 Server

 

Страница сгенерирована за 0.022 секунд. Запросов: 21.