Сценарий запуска OS X не запускается при запуске?

Я сделал сценарий запуска для запуска общих сценариев для меня при запуске, но я не могу заставить его работать. У меня OS X Yosemite 10.10.5. Это мой файл /Library/LaunchDaemons/com.craig.startup.items (я только что заметил, что у него нет расширения «.plist». Я добавлю расширение и перезагрузлюсь после публикации этого вопроса):

<?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>com.craig.startup.items</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>/Users/cliff/startup/onlaunchd</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <false/>
</dict>
</plist>

И /Users/cliff/startup/onlaunchd содержит следующее:

#!/bin/sh

log=/Users/cliff/startup/status.log
echo "`date` running startup scripts." >> $log
pushd /Users/cliff/startup/scripts/
for each in `ls`; do echo "`date` Running $each" >> $log; sh $each; done
popd

Есть дополнительные сценарии, но onlaunchd никогда не срабатывает, потому что я никогда не вижу вывод журнала в /Users/cliff/startup/status.log. Если я запускаю его напрямую от имени пользователя root, он работает нормально. Что мне не хватает, кроме расширения?


person Cliff    schedule 22.08.2015    source источник
comment
Вы запускали sudo launchctl load -w /Library/LaunchDaemons/com.craig.startup.items.plist?   -  person Valery Viktorovsky    schedule 22.08.2015
comment
ааа... Я получаю /Library/LaunchDaemons/com.craig.startup.items.plist: У пути были плохие права собственности/разрешения. Я просто установил право собственности на root:wheel, и это, похоже, исправило это в строке cmd. Почему бы вам не переместить этот комментарий в ответ, чтобы я мог принять, если все пойдет хорошо при перезагрузке? Спасибо! :)   -  person Cliff    schedule 22.08.2015


Ответы (1)


Вы должны запустить демон перед перезапуском:

sudo launchctl load -w /Library/LaunchDaemons/com.craig.startup.items.plist

Также, пожалуйста, установите +x разрешение chmod +x /Users/cliff/startup/onlaunchd и обновите код plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <key>Label</key>
   <string>com.user.loginscript</string>
   <key>Program</key>
   <string>/Users/cliff/startup/onlaunchd</string>
   <key>RunAtLoad</key>
   <true/>
</dict>
</plist>
person Valery Viktorovsky    schedule 22.08.2015
comment
Работает как шарм, однако я не могу принять это как ответ, пока не пройдет 3 минуты! Еще раз спасибо! - person Cliff; 22.08.2015
comment
О нет, теперь, похоже, мои сценарии не запускаются с привилегиями root, когда я перезагружаюсь. Он работает только с root, когда я использую строку cmd, которую вы мне дали. Я думал, что сценарии запуска всегда запускались от имени пользователя root? Я что-то упустил здесь? - person Cliff; 22.08.2015
comment
Вы зашифровали свою домашнюю папку? Ну, вы можете запустить скрипт для одного пользователя. Если это нормально, вы можете поместить plist в ~/Library/LaunchAgents, затем установить правильные разрешения chown <YOUR_USER>:staff com.craig.startup.items.plist и запустить демон launchctl load -w ~/Library/LaunchAgents/com.craig.startup.items.plist. Для теста, пожалуйста, выйдите из системы. - person Valery Viktorovsky; 22.08.2015
comment
Я думаю, что моя домашняя папка зашифрована. (не совсем уверен) Это недавно приобретенный Mac, принадлежащий компании, и я до сих пор не уверен, какой антивирус для шифрования работает. (Они добавили McAfee и кучу других вещей.) Я в замешательстве. Если я запускаю его как LaunchAgent, он будет работать с моим уровнем привилегий пользователя, что не сработает. Мне нужно, чтобы он работал как root. - person Cliff; 22.08.2015
comment
Вы можете проверить статус FileVault, запустив sudo fdesetup status. Я думаю, что если домашняя папка зашифрована, launchctl не может запустить файл из каталога /Users/cliff/startup, попробуйте переместить sh-файл в /Library/LaunchDaemons или другое место (/usr/local/etc). - person Valery Viktorovsky; 22.08.2015
comment
О, неважно. На самом деле он работает как root. Сценарий в /Users/cliff/startup/scripts/ (который я зафиксировал из вопроса) просто не дает мне желаемого поведения, потому что он запускается до процесса, которым он пытается управлять. Это вопрос порядка действий. Мне придется взломать задержку или найти лучший способ. Еще раз спасибо! Я уже принял ваш ответ! - person Cliff; 22.08.2015
comment
Я пытаюсь запустить команду kextunload при запуске, чтобы что-то отключить. Это более основная цель. - person Cliff; 22.08.2015