Под кем выполняется exec и safe_exec

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
DAP
Сообщения: 118
Зарегистрирован: Пн апр 06, 2015 10:25 pm
Благодарил (а): 6 раз
Поблагодарили: 16 раз

Под кем выполняется exec и safe_exec

Сообщение DAP » Вс фев 05, 2017 5:58 pm

Вопрос под кем выполняется exec и safe_exec на linux, конкретно RasPi 3?

делаю сценарий с кодом :

Код: Выделить всё

safe_exec ('pacmd set-sink-volume 1 0'); 
код успешно выключает звук нужного sink'a, а если код вставить в кнопку - звук не отключается.

ЗЫ
Команда сработает только от pi.
ipz
Сообщения: 238
Зарегистрирован: Чт ноя 26, 2015 10:54 pm
Благодарил (а): 38 раз
Поблагодарили: 45 раз

Re: Под кем выполняется exec и safe_exec

Сообщение ipz » Вс фев 05, 2017 8:01 pm

Команда запустится от того пользователя, который запускает сервис majordomo.
У меня www-data, например. Проверить можно:

Код: Выделить всё

ps axu |grep cycle
DAP
Сообщения: 118
Зарегистрирован: Пн апр 06, 2015 10:25 pm
Благодарил (а): 6 раз
Поблагодарили: 16 раз

Re: Под кем выполняется exec и safe_exec

Сообщение DAP » Вт фев 07, 2017 10:21 am

можно ли выполнить некую команду от рута, если да то как ?
например

Код: Выделить всё

safe_exec ('sudo service ser2net restart'); 

Код: Выделить всё

exec ('sudo service ser2net restart'); 
не срабатывают
dmw
Сообщения: 469
Зарегистрирован: Вт мар 12, 2013 1:22 am
Благодарил (а): 41 раз
Поблагодарили: 81 раз

Re: Под кем выполняется exec и safe_exec

Сообщение dmw » Вт фев 07, 2017 11:44 am

1) дать права запуска ser2net не только root-у:

Код: Выделить всё

chmod a+s /полный/путь/к/ser2net
тогда можно запускать без sudo:

Код: Выделить всё

safe_exec ('/полный/путь/к/ser2net'); 
2) sudo требует ввода root пароля, поэтому просто exec ('sudo ...'); нельзя
Чтобы разрешить sudo для пользователя www-data не спрашивать пароль, нужно в файле /etc/sudoers добавить:

Код: Выделить всё

www-data ALL=NOPASSWD:/etc/init.d/ser2net
тогда можно запускать так:

Код: Выделить всё

safe_exec ('sudo /etc/init.d/ser2net restart');
За это сообщение автора dmw поблагодарили (всего 3):
lanket (Вт фев 07, 2017 11:45 am) • DAP (Вт фев 07, 2017 1:35 pm) • Majdomko (Чт фев 09, 2017 8:39 am)
Рейтинг: 3.49%
DAP
Сообщения: 118
Зарегистрирован: Пн апр 06, 2015 10:25 pm
Благодарил (а): 6 раз
Поблагодарили: 16 раз

Re: Под кем выполняется exec и safe_exec

Сообщение DAP » Вт фев 07, 2017 2:07 pm

благодарю, пока прибил гвоздями добавив в cron перезапуск каждые 5 минут
DAP
Сообщения: 118
Зарегистрирован: Пн апр 06, 2015 10:25 pm
Благодарил (а): 6 раз
Поблагодарили: 16 раз

Re: Под кем выполняется exec и safe_exec

Сообщение DAP » Ср фев 08, 2017 12:22 am

отвечу сам себе комментарием разработчика
exeс("..."); -- запускает команду от имени веб-сервера
safe_exec("..."); -- запускает команду от имени основного цикла (чтобы вдруг не "завалить" сервер, особенно в windows-актуально и при запуске неконсольных приложений)
ipz
Сообщения: 238
Зарегистрирован: Чт ноя 26, 2015 10:54 pm
Благодарил (а): 38 раз
Поблагодарили: 45 раз

Re: Под кем выполняется exec и safe_exec

Сообщение ipz » Ср фев 08, 2017 12:44 am

Странно, у меня все запускается от www-data, хотя первая строка в выводе - root запускает php от имени www-data (если я ничего не путаю...):

Код: Выделить всё

 ps axu | grep cycle | grep -v grep
root     22800  0.0  0.3   9504  3204 ?        S    фев07   0:00 sudo -u www-data php /var/www/cycle.php
www-data 22806  0.9  3.3  97652 32172 ?        S    фев07   0:57 php /var/www/cycle.php
www-data 22812  0.0  2.9  94416 28412 ?        S    фев07   0:02 php -q ./scripts/cycle_rss.php --params a:0:{}
www-data 22814  0.0  3.0  94416 28480 ?        S    фев07   0:04 php -q ./scripts/cycle_execs.php --params a:0:{}
www-data 22815  0.2  3.0  95276 29324 ?        S    фев07   0:12 php -q ./scripts/cycle_ping.php --params a:0:{}
www-data 22816  0.1  3.1  96172 30164 ?        S    фев07   0:11 php -q ./scripts/cycle_bluetooth.php --params a:0:{}
www-data 22817  2.6  3.1  95556 29664 ?        S    фев07   2:39 php -q ./scripts/cycle_websockets.php --params a:0:{}
www-data 22820  0.0  3.0  94416 28588 ?        S    фев07   0:02 php -q ./scripts/cycle_webvars.php --params a:0:{}
www-data 22821  0.0  3.0  94772 28540 ?        S    фев07   0:02 php -q ./scripts/cycle_watchfolders.php --params a:0:{}
www-data 22827  0.2  3.0  94780 29268 ?        S    фев07   0:13 php -q ./scripts/cycle_main.php --params a:0:{}
www-data 22831  0.9  3.0  95032 29060 ?        S    фев07   0:57 php -q ./scripts/cycle_mysensor.php --params a:0:{}
www-data 22833  0.1  3.0  94772 29064 ?        S    фев07   0:08 php -q ./scripts/cycle_scheduler.php --params a:0:{}
www-data 22835  0.3  3.0  94772 28708 ?        S    фев07   0:20 php -q ./scripts/cycle_states.php --params a:0:{}
 
Кто-то писал skysilver (?) в теме про запуск бекапа, что save_exec запускает команду отдельным процессом... Т.образом, если это тяжелый или длительный по времени процесс, то он не застопорит основную систему, будет выполняться как-бы параллельно.
Majdomko
Сообщения: 6
Зарегистрирован: Чт фев 02, 2017 3:03 pm
Благодарил (а): 3 раза
Поблагодарили: 0

Re: Под кем выполняется exec и safe_exec

Сообщение Majdomko » Чт фев 09, 2017 8:42 am

dmw писал(а):1) дать права запуска ser2net не только root-у:

Код: Выделить всё

chmod a+s /полный/путь/к/ser2net
тогда можно запускать без sudo:

Код: Выделить всё

safe_exec ('/полный/путь/к/ser2net');
2) sudo требует ввода root пароля, поэтому просто exec ('sudo ...'); нельзя
Чтобы разрешить sudo для пользователя www-data не спрашивать пароль, нужно в файле /etc/sudoers добавить:

Код: Выделить всё

www-data ALL=NOPASSWD:/etc/init.d/ser2net
тогда можно запускать так:

Код: Выделить всё

safe_exec ('sudo /etc/init.d/ser2net restart'); 
Спасибо тебе добрый человек ! Надо бы такие ответы в шапке закрепить, очень полезно :geek:
Ответить