Как мога да стартирам ruby ​​скрипт като root на всеки 10 секунди на Mac?

Имам следното в моя /Library/LaunchDemons като com.me.filechecker.plist

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!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>File Checker</string>
        <key>StartInterval</key>
        <integer>10</integer>
        <key>Program</key>
        <string>/usr/bin/ruby "/Users/me/projects/filechecker/filechecker.rb"</string>
    </dict>
</plist>

Аз също бягах

sudo chown root /Library/LaunchDaemons/com.me.filechecker.plist

и

sudo chmod a+x /Library/LaunchDaemons/com.me.filechecker.plist

и

sudo launchctl load -w /Library/LaunchDaemons/com.me.filechecker.plist

Изглежда, че не работи (или ако работи, не прави нищо). Как мога да отстраня грешки и да го накарам да работи?


person Some Guy    schedule 10.05.2015    source източник
comment
Какви са permissions, които сте задали за скрипта, и опитали ли сте също да го стартирате като cronjob може би? Още една мисъл — помислете също за публикуване на ruby script; може да е проблем в скрипта.   -  person l'L'l    schedule 10.05.2015
comment
Работят ли cronjobs като root? Ако да, какво да направя, за да го добавя като cronjob и ще стартира ли автоматично всеки път, когато стартирам компютъра си? Разрешенията са a+x chmodded.   -  person Some Guy    schedule 10.05.2015
comment
Файлът има разрешения... -rwxr-xr-x@ 1 root колело 458 10 май 11:36 com.me.filechecker.plist (IDK какво е колелото)   -  person Some Guy    schedule 10.05.2015
comment
Тези разрешения обикновено са добри за cronjobs или daemons. cronjobs може да използва разрешения според нуждите на потребителя, за да изпълни задачата, ще се стартира автоматично, когато стартирате компютъра си, така че е доста гъвкав. Вашият скрипт работи ли нормално, когато го изпълните от Terminal.app, и какво прави? Както споменах преди, може да обмислите публикуването на скрипта, за да можем да видим какво точно прави. Опитайте също тази команда в терминала: ps aux | grep filechecker - виждате ли нещо в списъка?   -  person l'L'l    schedule 10.05.2015
comment
wheel е името на специалната потребителска група, към която принадлежи потребителят root - вижте superuser.com/a/191969/139307 .   -  person mklement0    schedule 12.05.2015
comment
В полза на онези, които отговарят, както и на бъдещите читатели: Ако даден отговор решава проблема ви, моля, приемете го, като щракнете върху голямата отметка до него; ако намирате отговор за полезен, моля, гласувайте за него, като щракнете върху иконата със стрелка нагоре (можете да направите и двете). Вижте съответната статия в помощния център. Ако въпросът ви все още не е отговорен, дайте обратна връзка.   -  person mklement0    schedule 12.05.2015
comment
Още не съм проверил. Дай ми малко време.   -  person Some Guy    schedule 14.05.2015


Отговори (2)


Името на изпълнимия файл и неговите аргументи трябва да бъдат предадени по същия начин както на execvp функция. Трябва да подадете име на изпълним файл и всички аргументи отделно. Аргументите трябва да се предават в ключ ProgramArguments:

    <key>Program</key>
    <string>/usr/bin/ruby</string>
    <key>ProgramArguments</key>
    <array>
       <string>/usr/bin/ruby</string>
       <string>/Users/me/projects/filechecker/filechecker.rb</string>
    </array>

В този случай можете също да пропуснете клавиша Program. Повече в man launchd.plist

 Program <string>
 This key maps to the first argument of execvp(3).  If this key is missing, then the first element of
 the array of strings provided to the ProgramArguments will be used instead.  This key is required in
 the absence of the ProgramArguments key.

 ProgramArguments <array of strings>
 This key maps to the second argument of execvp(3).  This key is required in the absence of the Program
 key. Please note: many people are confused by this key. Please read execvp(3) very carefully!
person baf    schedule 10.05.2015
comment
Добър съвет, но не трябва да поставяте в двойни кавички стойността на втория елемент <string> - не е включена обвивка, така че не се извършва премахване на кавички. С поставените кавички те стават част от самия аргумент. - person mklement0; 10.05.2015
comment
@mklement0 Коригирано. Благодаря! - person baf; 10.05.2015
comment
P.S.: Бих казал, че за простота обикновено е по-добре да използвате само клавиша ProgramArguments. - person mklement0; 11.05.2015

как да настроя catalina.base и catalina.home?
person mklement0    schedule 11.05.2015