linux上的开机自启动很简单,通过systemd就能搞定。对于macos和windows的开机自启动则没有记录过,这里记录下。
MacOS开机自启动
Macos提供三种开机自启动的方式,详情可以看这里三种方式配置Mac OS X的启动项。这是一篇12年的老文章了。
这里挑选一种和linux上的systemd很像的方式,使用launchd来进行开机自启动。和systemd一样,launchd也是MacOS上的第一个进程,并且提供和systemctl很类似的launchctl工具。
使用Launchd设置开机自启动,仅仅需要编写一个plist
文件并将其放到~/Library/LaunchAgents/
。以下是一个java应用开机自启的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.connect</string>
<!-- <key>Disabled</key>
<false/> -->
<key>KeepAlive</key>
<false/>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>/tmp</string>
<key>EnvironmentVariables</key>
<dict>
<key>aPATH</key>
<string>/bin:/usr/bin:/usr/local/bin</string>
</dict>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/java</string>
<string>-jar</string>
<string>-Xmx100m</string>
<string>/path/to/your.jar</string>
</array>
<key>SoftResourceLimits</key>
<dict>
<key>NumberOfFiles</key>
<integer>65536</integer>
</dict>
<key>HardResourceLimits</key>
<dict>
<key>NumberOfFiles</key>
<integer>65536</integer>
</dict>
</dict>
</plist>
更多详情可以见launchd.info
如果想实现类似systemctl restart xx
的能力,可以使用下面的脚本:
#! /bin/sh
launchctl unload -w ~/Library/LaunchAgents/com.connect.plist
sleep 1
launchctl load -w ~/Library/LaunchAgents/com.connect.plist
unload和load是老旧的launchctl命令,man launchctl
能看到,官方推荐我们使用 bootstrap | bootout | enable | disable
- unload -w 等同于bootout + disable,停止进程并禁用开机自启动。
- load -w 等同于enable + bootstrap,启动进程并设置开机自启动。
- bootstrap和bootout只有在service是enable的状态下才有效。所以下面的脚本中,bootout在disable之前,bootstrap后enable之后。
使用新命令来达成上面的效果就是:
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.connect.plist
launchctl disable gui/$(id -u)/com.connect
launchctl enable gui/$(id -u)/com.connect
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.connect.plist
service是否被disable的db文件地址如下。MacOS不会自动删除db文件中无效的service,这导致执行launchctl print-disabled gui/$(id -u)
时会看到一些无效的service。手动删除这些无效的service,需要先在恢复模式关闭安全模式,然后才能通过vim修改。
/private/var/db/com.apple.xpc.launchd/disabled.$(id -u).plist
资源限制
unix系统都限制了可打开文件数,如何修改呢?
- 新建Library/LaunchDaemons/limit.maxfiles.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>limit.maxfiles</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>limit</string>
<string>maxfiles</string>
<string>64000</string>
<string>524288</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
- 修改文件权限
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
sudo chmod 644 /Library/LaunchDaemons/limit.maxfiles.plist
- 加载plist文件(或重启系统后生效 launchd在启动时会自动加载该目录的plist)
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
- 确认更改后的限制
launchctl limit maxfiles
windows开机自启动
编写startup.vbs
,放到
C:\Users\你的用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
文件夹下
startup.vbs
内容如下:
set forward=WScript.CreateObject("WScript.Shell")
forward.Run "taskkill /f /im forward.exe",0,True
forward.Run "C:\Users\arloor\go\bin\forward.exe -conf D:\bin\caddyfile -log E:\data\var\log\forward.log -socks5conf=D:\bin\socks5.yaml",0
- 先关闭forward.exe,末尾的
0,True
表示不开启窗口,等待该命令结束再执行下一行 - 再启动forward.exe,末尾的
0
表示不开启窗口
具体Run命令见www.vbsedit.com