Як запустити команду запускати як root


32

У мене є така команда startctl як файл .plist. Він завантажений і встановлений для запуску раз на день, але він повинен працювати як root, і я не впевнений, як це перевірити.

Крім того, це завдання cron в основному компакт-дисків в каталог і виконує команду. Я впевнений, що у запуску є кращий спосіб вказати каталог, де він повинен запускати команду.

Як я можу знати, що він працює як root і чи є кращий спосіб написати це?

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>dev.project.frontpage.feedparser</string>
    <key>ProgramArguments</key>
    <array>
        <string>cd</string>
        <string>/Users/eman/src/project/trunk/includes/;</string>
        <string>./feed-parser.php</string>
        <string>-c</string>
        <string>./feed-parser-config.xml</string>
    </array>
    <key>QueueDirectories</key>
    <array/>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>12</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
    <key>WatchPaths</key>
    <array/>
</dict>
</plist>

Відповіді:


46

У якій папці .plistзберігається?

launchdзапускає Daemons ( /Library/LaunchDaemonsабо /System/Library/LaunchDaemons) як корінь і запускатиме їх незалежно від того, користувачі ввійшли чи ні. Агенти запуску ( /Library/LaunchAgents/або ~/Library/LaunchAgents/) запускаються, коли користувач зареєстрований як цей користувач. Не можна використовувати setuid для зміни користувача, який запускає скрипт на демон.

Оскільки ви хочете додати його у себе, /Library/LaunchDaemonsви хочете переконатися, що ви завантажуєте його у launchdправах адміністратора (напр. sudo launchctl load -w /Library/LaunchDaemons/com.apple.samplelaunchdscript.plist)

Ознайомтеся з man launchdдодатковою інформацією.


Дякую. Це саме те, що я шукав, наскільки відповідав на основне питання. Сценарій знаходиться в / Бібліотеці / LaunchDaemons, тому він вже працює як root.
Еммануель Мвангі

Питання для новачків: чи launchctlпотрібен запуск встановлення демона? Я маю на увазі, чи недостатньо скопіювати файл plist у відповідний шлях?
Клавдікс

@Claudix: Це правильно. Копіювання конфігурації запуску на місце недостатньо - вам все одно доведеться "включити його" (навантаження на
startctl

4

Ви спробували скористатися одним із запущених редакторів?

Щоб переконатися, що він працює як root, я майже впевнений, що запуск буде запускати програми як root. Ви коли-небудь думали надати право власності на скрипт root, використовуючи chmod? Таким чином, він не буде працювати, якщо не запустити як root. Потім потрібно перевірити, чи він працює.

sudo chown root:admin script_to_run_by_launchd

Я використовував Лінгона для написання цього сценарію. І можу підтвердити, що це добре працює в Леопарді.
Еммануель Мвангі

3

Списки властивостей у LaunchAgents також працюють, але вам потрібно завантажити як агенти, так і демон:

sudo chown root /Library/LaunchAgents/test.plist
sudo launchctl load /Library/LaunchAgents/test.plist

Якщо у списку відключений ключ, він завантажується при наступному вході або перезапуску за замовчуванням, і -wце не потрібно.

Технічна примітка TN2083: Демони та агенти :

Демон - це програма, яка працює у фоновому режимі як частина загальної системи (тобто не прив’язана до конкретного користувача). Демон не може відображати жоден графічний інтерфейс; точніше, забороняється підключатися до віконного сервера.

[...]

Агент - це процес, який працює у фоновому режимі від імені конкретного користувача. Агенти корисні, оскільки вони можуть робити те, що демони не можуть, наприклад надійно отримати доступ до домашнього каталогу користувача або підключитися до віконного сервера.


3

Для тих, хто бажає спеціально запустити агента запуску з привілеями кореня в ланцюзі Launch Daemon , це можна зробити:

  • Створіть свій LaunchAgent в ~/Library/LaunchAgents
  • Запустіть свою заявку за sudoдопомогою ProgramArgumentsвласності у вашому списку
  • Встановіть NOPASSWDопцію для вашої програми в/etc/resolvers.d

Детальніше дивіться цю та цю відповідь.


2

LaunchControl зробив це безболісно для мене в Йосеміті. Він має приємний графічний інтерфейс перетягування, який допоможе вам створити або редагувати служби. Було дивно, коли я бачив усі служби, про які я не знав.

Кроки

  1. Запустіть LaunchControl
  2. Змініть вгорі ліворуч на GlobalDeamons та введіть пароль свого адміністратора
  3. Файл-> Створити
  4. Під етикеткою дайте йому унікальну назву. Конвенція - це "com.company.appname"
  5. У програмі для запуску використовуйте скрипт оболонки Unix або будь-яку команду, яку ви віддаєте перевагу БЕЗ аргументів
  6. Якщо ваш додаток вимагає аргументів, змініть поле, що випадає, з "Аргумент за замовчуванням" на "Спеціальний аргумент"
    1. тепер наведіть аргумент, який би ви мали нормально, як ви запустили його з фактичного командного рядка.
  7. Запустити при завантаженні не обов’язково, ви вирішите.
  8. З правого боку перетягніть StartInterval і встановіть потрібний інтервал. FAQ у меню Довідка дуже добре.

Чи можете ви відредагувати свою публікацію, щоб включити кроки, які може зробити автор, щоб вирішити проблему?
Cfinley
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.