0%

各种系统添加开机启动项

RedHat/CentOS

chkconfig

  • 文件存放位置:/etc/init.d/
  • 启动方式:chkconfig --add mysql --level 2345

systemd

  • 文件存放位置:/usr/lib/systemd/system/
  • 启动方式:systemctl enable mysql

rc.local

  • 内容写入:/etc/init.d/rc.local

Ubuntu/Debian/Deepin(16/18版本之后)

chkconfig

  • 文件存放位置:/etc/init.d/
  • 启动方式:chkconfig --add mysql --level 2345

systemd

  • 文件存放位置:/usr/lib/systemd/system/
  • 启动方式:systemctl enable mysql

rc.local

  • 内容写入:/etc/init.d/rc.local

MacOS

使用launchd方式添加启动项

Apple 要求开发者使用 launchd 来添加开机启动服务,这个 launchd 会用两个进程来启动服务,分别是daemon一个是agent。前者处理系统开机后并启动服务,后者处理用户登录后并启动服务,他们的配置文件是一个符合 xml 规范的plist文本文档来实现的,该plist位于以下目录,各目录决定了其启动的先后和拥有的权限:

  • ~/Library/LaunchAgents 特定用户登录后以当前用户启动,第三方程序一般都放这里
  • /Library/LaunchAgents 任一用户登录后以当前用户启动,管理员使用
  • /System/Library/LaunchAgents 系统组件,任一用户登录后以当前用户启动
  • /Library/LaunchDaemons 系统装载时以root用户启动,管理员使用
  • /System/Library/LaunchDaemons 系统组件,系统装载时以root用户启动

我们这里以redis、frpc两个应用为例。

Redis-Server

  • Redis plist 配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?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>KeepAlive</key>
<true/>
<key>Label</key>
<string>com.redis.redis-server</string>
<key>Program</key>
<string>/usr/local/bin/redis-server</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/redis-server</string>
<string>/usr/local/etc/redis/redis.conf</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/usr/local/var/log/launchd_redis.log</string>
<key>StartInterval</key>
<integer>3</integer>
<key>WorkingDirectory</key>
<string>/usr/local/var/lib/redis</string>
</dict>
</plist>

准备好以上文件后,将 plist 文件放到 /Library/LaunchDaemons/com.apple.redis-server.plist,最后就是设置开机启动:

1
sudo launchctl load -w /Library/LaunchDaemons/com.apple.redis-server.plist

启动

1
sudo launchctl start com.redis.redis-server

frpc

~/Library/LaunchAgents/frp.plist

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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>KeepAlive</key>
<true/>
<key>Label</key>
<string>frpc</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/frpc</string>
<string>-c</string>
<string>/etc/frpc.ini</string>
</array>
</dict>
</plist>

启动

1
sudo launchctl start frp