Страница 1 из 1

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

Добавлено: Вс фев 05, 2017 5:58 pm
DAP
Вопрос под кем выполняется exec и safe_exec на linux, конкретно RasPi 3?

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

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

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

ЗЫ
Команда сработает только от pi.

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

Добавлено: Вс фев 05, 2017 8:01 pm
ipz
Команда запустится от того пользователя, который запускает сервис majordomo.
У меня www-data, например. Проверить можно:

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

ps axu |grep cycle

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

Добавлено: Вт фев 07, 2017 10:21 am
DAP
можно ли выполнить некую команду от рута, если да то как ?
например

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

safe_exec ('sudo service ser2net restart'); 

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

exec ('sudo service ser2net restart'); 
не срабатывают

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

Добавлено: Вт фев 07, 2017 11:44 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');

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

Добавлено: Вт фев 07, 2017 2:07 pm
DAP
благодарю, пока прибил гвоздями добавив в cron перезапуск каждые 5 минут

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

Добавлено: Ср фев 08, 2017 12:22 am
DAP
отвечу сам себе комментарием разработчика
exeс("..."); -- запускает команду от имени веб-сервера
safe_exec("..."); -- запускает команду от имени основного цикла (чтобы вдруг не "завалить" сервер, особенно в windows-актуально и при запуске неконсольных приложений)

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

Добавлено: Ср фев 08, 2017 12:44 am
ipz
Странно, у меня все запускается от 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 запускает команду отдельным процессом... Т.образом, если это тяжелый или длительный по времени процесс, то он не застопорит основную систему, будет выполняться как-бы параллельно.

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

Добавлено: Чт фев 09, 2017 8:42 am
Majdomko
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: