Я створив сценарій у /etc/init.d/, який повинен запускати кілька інших сценаріїв від інших (непривілейованих користувачів) користувачів з їхніх домашніх каталогів, як ніби вони їх запускали.
Я запускаю ці сценарії за допомогою: sudo -b -u <username> <script_of_a_particular_user>
І це працює. Але для кожного користувацького сценарію, який продовжує працювати (наприклад, якийсь сторожовий пес), я бачу відповідний батьківський процес sudo, ще живий і працює як root. Це створює безлад у списку активних процесів.
Отже, моє запитання таке: як я можу запустити (розщедрити) інший скрипт із існуючого bash-скрипту як іншого користувача та залишити його як осиротілого (самостійного) процесу?
Більш детальне пояснення:
я в основному намагаюся надати іншим користувачам на машині засіб для запуску матеріалів при запуску системи або відключенні системи, запустивши виконувані файли, знайдені у відповідних підкаталогах, знайдених у їхньому домашньому каталозі під назвою .startUp та .shutDown. Оскільки я не знайшов інших засобів для цього, я написав свій скрипт bash, який робить саме це, і я налаштував його як службовий скрипт (наслідуючи приклад скелета) в /etc/init.d/, тому під час його запуску з аргументом start він запускає все з каталогів .startUp, а коли він запускається із аргументом stop, він запускає все з каталогів .shutDown всіх користувачів, як їх.
Крім того, я також зацікавлений, чи міг би я використати якесь існуюче рішення для вирішення цієї проблеми.
ОНОВЛЕННЯ
Я трохи озирнувся і знайшов це питання:
/unix/22478/detach-a-daemon-using-sudo
Прийнята відповідь там, на використання:, sudo -u user sh -c "daemon & disown %1"
працює для мене. Але я також намагався без відмови% 1, і це те саме. Отже, це для мене працює, як я і очікував:
sudo -u <username> bash -c "<script_of_a_particular_user> &"
Моє додаткове запитання зараз: чому це працює без відмови? чи варто все-таки залишити виклик відмови , незалежно від якогось потенційного особливого випадку?
ОНОВЛЕННЯ 2
Мабуть, це теж працює:
su <username> -c "<script_of_a_particular_user> &"
Чи є якась різниця між цим дзвінком та дзвінком sudo? Я знаю, що це потенційно зовсім інше питання. Але оскільки я сам знаходжу відповіді тут, можливо, заради цієї теми хтось міг би тут прояснити.
ОНОВЛЕННЯ 3
Обидва ці методи із су або судо тепер створюють новий процес запуску (єдиний процес, що працює як root) після завантаження машини. Видимий у списку процесів як:
startpar -f -- <name_of_my_init.d_script>
Чому цей процес породжений? Очевидно, що я роблю щось не так, оскільки жоден інший скрипт init.d не працює.
ОНОВЛЕННЯ 4
Проблема зі запуском програми вирішена. Я почав ще одне питання для цього:
процес запуску запуску зліва висів під час запуску процесів з rc.local або init.d
І ще одне питання для подальшого обговорення механізмів запуску для непривілейованих користувачів:
Надання нормальним користувачам (не-root) можливостей ініціалізації та відключення автоматичного запуску