Запуск Python Script при запуске OSX

У меня есть скрипт Python, который я хочу выполнить, как только я войду в свой Mac . Я пробовал различные методы в Интернете. Но ни один из них, кажется, не работает.

Я пытался разместить com.username.scriptname.plist файл в библиотеке /LaunchAgents.

<?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.username.scriptname</string>

  <key>Program</key>
  <string>/Users/username/scriptlocation/scriptname.py</string>

  <key>RunAtLoad</key>
  <true/>

  <key>StandardErrorPath</key>
  <string>/tmp/com.username.scriptname.err</string>

  <key>StandardOutPath</key>
  <string>/tmp/com.username.scriptname.out</string>
</dict>
</plist>

Я разместил свой сценарий в месте, указанном в .plist файл, и запустил следующий launchctl load /Library/LaunchAgents/com.username.scriptname.plist, Однако, похоже, ничего не происходит. Я пропускаю какой-либо шаг или делаю что-то не так? Нужно ли менять какие-либо настройки?

Ошибка:

->grep com.username.scriptname /var/log/syslog
grep: /var/log/syslog: No such file or directory

->launchctl list com.username.scriptname
{
    "StandardOutPath" = "/tmp/com.username.scriptname.out";
    "LimitLoadToSessionType" = "Aqua";
    "StandardErrorPath" = "/tmp/com.username.scriptname.err";
    "Label" = "com.username.scriptname";
    "TimeOut" = 30;
    "OnDemand" = true;
    "LastExitStatus" = 19968;
    "Program" = "/Users/username/scriptname.sh";
};

Это странно, как он показывает scriptname.sh, когда у меня есть файл Python!

1 ответ

Это .plist выглядит правильно, поэтому должно быть что-то не так (мои догадки: не исполняемый или неверный путь к скрипту).

Что вы можете сделать для отладки:

  • Проверьте, что в системном журнале о вашей работе: grep com.username.scriptname /var/log/syslog, Там может быть что-то вроде com.apple.xpc.launchd[1] (com.username.scriptname[PID]): Could not find and/or execute program specified by service: 13: Permission denied: /Users/username/scriptlocation/scriptname.py
  • Проверьте, что launchd должен сказать о вашей работе: launchctl list com.username.scriptname
  • Также: что делает launchctl list | grep com.username.scriptname сказать?

Кроме того, что man launchd.plist должен сказать:

RunAtLoad <boolean> Этот необязательный ключ используется для контроля запуска вашей работы один раз во время загрузки работы. По умолчанию установлено значение false. Этого ключа следует избегать, поскольку спекулятивный запуск заданий отрицательно влияет на сценарии загрузки системы и входа пользователя.

Другие вопросы по тегам