use*_*659 11 login logout macos
我正在尝试构建自定义渲染农场管理器,并且我想在不使用 OS X 机器时自动将它们添加到渲染农场。
有没有办法在任何用户注销后触发脚本运行,然后在任何用户登录时停止?
slh*_*hck 11
在 OS X 中登录/注销时运行脚本的方法有多种,有些是更新的,仅适用于 10.5 及更高版本,有些已弃用,但最快的方法是添加Login Hook.
首先,创建要运行的脚本。打开终端并输入:
touch ~/script.sh
open -e !$
Run Code Online (Sandbox Code Playgroud)
这将打开一个文本编辑器。输入脚本,例如具有以下内容:
#!/bin/sh
# insert your script here
Run Code Online (Sandbox Code Playgroud)
保存文件。在您的终端中,运行:
chmod +x ~/script.sh
Run Code Online (Sandbox Code Playgroud)
这将使文件可执行。现在,让我们将它添加为一个钩子:
sudo defaults write com.apple.loginwindow LoginHook /usr/local/bin/script.sh
Run Code Online (Sandbox Code Playgroud)
还有Logout Hook对应的:
sudo defaults write com.apple.loginwindow LogoutHook /usr/local/bin/script2.sh
Run Code Online (Sandbox Code Playgroud)
我已经在 OS X 10.6 上测试过这个,它甚至应该可以工作到 10.8。请记住,该脚本以 as 运行,root并且分别只有一个用于登录和注销的挂钩。
要撤消所有这些,请输入
sudo defaults delete com.apple.loginwindow LoginHook
sudo defaults delete com.apple.loginwindow LogoutHook
Run Code Online (Sandbox Code Playgroud)
请注意,不建议将此方法用于部署或任何事情,但如果您只是按照您的问题使用它,那应该没问题。
登录钩子在 10.4 中被弃用,取而代之的是 launchd。要在登录时运行脚本,请将这样的 plist 保存为~/Library/LaunchAgents/test.plist. 即使您不运行,它也会在下次登录时加载launchctl load ~/Library/LaunchAgents/test.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>test</string>
<key>ProgramArguments</key>
<array>
<string>say</string>
<string>test</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅man launchd.plist和此博客文章。
| 归档时间: |
|
| 查看次数: |
32808 次 |
| 最近记录: |