在OSX启动时运行Python脚本
我有一个Python脚本,我想在登录到Mac时立即执行。我在网上尝试过各种方法。但它们似乎都不起作用 我尝试将在OSX启动时运行Python脚本,python,macos,plist,launchctl,Python,Macos,Plist,Launchctl,我有一个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
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>
当我有一个Python文件时,它是如何显示scriptname.sh的,这很奇怪 这个
.plist
看起来是正确的,所以一定是出了什么问题(我猜:不可执行或脚本路径错误)
您可以执行哪些调试操作:
- 检查syslog中关于您的作业的内容:
。可能有类似于grep com.username.scriptname/var/log/syslog
com.apple.xpc.launchd[1](com.username.scriptname[PID]):无法找到和/或执行服务指定的程序:13:权限被拒绝:/Users/username/scriptlocation/scriptname.py
- 检查launchd对您的工作有何评论:
launchctl list com.username.scriptname
- 另外:
说了什么launchctl list | grep com.username.scriptname
man launchd.plist
要说的话:
RunAtLoad
此可选键用于控制在加载作业时是否启动作业一次。默认值为false。这把钥匙应该是
避免,因为投机性作业启动会对系统启动和用户登录场景产生不利影响
执行launchctl命令时会出现以下错误<代码>路径的所有权/权限不正确@GreyBeard,啊,那么您的
.plist
不属于根:控制盘
。然后尝试sudo chown root:wheel/Library/LaunchAgents/com.username.scriptname.plist
。为什么即使它包含正确的答案也会被否决?在该答案包含相同内容12小时后,又添加了一个答案!请注意,这个问题是由于这个答案而改变的,最后一步(chowning the plist)在评论中有所说明。为什么不点击Apple菜单、系统首选项、用户,然后选择您的用户名并将您的脚本添加到登录项中呢?我基本上想编写一个shell脚本来实现这一点!用类似的方法<代码>osascript-e'告诉应用程序“系统事件”,使登录项以属性结尾{path:“/Users/FreddyFrog/SomethingPythony”}”谢谢!它可以工作,但脚本会在文本编辑器中打开,而不是使其可执行。脚本是否有一个shebang作为Python解释器路径的第一行?你能给我看剧本吗?如果没有,做一个非常简单的测试——例如,让它在你的桌面上创建一个空文件或目录,这样你就可以看到它是否运行,或者让它运行osascript-e'beep 3'
->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";
};