1

我有一个 Python 脚本,我想在登录 Mac 后立即执行该脚本。我在互联网上尝试了各种方法。但它们似乎都不起作用。

我尝试将com.username.scriptname.plist文件放在 Library/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";
};

当我有一个 Python 文件时,它显示 scriptname.sh 的方式很奇怪!

4

1 回答 1

2

.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> 此可选键用于控制您的作业是否在加载作业时启动一次。默认值为假。应该避免这个键,因为推测性的作业启动对系统启动和用户登录场景有不利影响。

于 2015-05-09T20:53:19.083 回答