MacOS开机自动挂载硬盘&frpc
开启 断电后自动启动
功能
系统偏好设置
-> 节能
-> 断电后自动启动
。
配置开机自动运行脚本
- 用户登录运行:
/Library/LaunchAgents/
- 不需要用户登录运行:
/Library/LaunchDaemons/
- 用户身份运行:
~/Library/LaunchAgents/
macOS
自动运行是通过 launchd
工具管理的,launchd
配置文件是以 .plist
结尾的格式文件。
注意:配置文件的拥有者必须是 root:wheel
,命令:sudo chown root:wheel com.codezm.frpc.plist
。读写权限需为 644
,命令:sudo chmod 644 com.codezm.frpc.plist
为达到全自动运行效果,不需要用户登录即可运行脚本,创建 vim /Library/LaunchDaemons/com.codezm.frpc.plist
文件,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <?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.codezm.frpc</string> <key>KeepAlive</key> <true/> <key>RunAtLoad</key> <true/> <key>ProgramArguments</key> <array> <string>/bin/sh</string> <string>ping.sh</string> </array> <key>WorkingDirectory</key> <string>/Users/codezm</string> <key>StandardOutPath</key> <string>/tmp/com.codezm.frpc.plist.log</string> <key>StandardErrorPath</key> <string>/tmp/com.codezm.frpc.plist.log</string> </dict> </plist>
|
创建 vim /Users/codezm/ping.sh
脚本文件,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #!/bin/bash ping_success_status() { if ping -c 1 $IP >/dev/null; then echo "$IP Ping is successful." /Users/codezm/frp/frpc -c /Users/codezm/frp/frpc.ini break else echo "$IP Ping is failed." fi } IP="192.168.36.254" n=1 while (( $n <= 60 )); do echo "Ping $n times." ping_success_status sleep 1 (( n++ )) done
|
frp
服务需要先联网,此脚本的作用是在保证网络连通的情况下再启动 frp
服务。
执行加载命令:
1 2 3 4 5 6 7
| sudo launchctl load -w /Library/LaunchDaemons/com.codezm.frpc.plist
sudo launchctl unload -w /Library/LaunchDaemons/com.codezm.frpc.plist
sudo launchctl list | grep codezm
|
执行成功后,重启电脑,在手机端通过 Termius
软件测试外网是否成功登陆。
遇到的问题
挂载磁盘问题
电脑使用的是通过USB接口连接外置移动硬盘,并分成了两个分区,其中一个分区是系统盘,另一个分区主要用于区分大小写格式代码盘,即: work
,在通过以上步骤操作部署后,再次登入系统时,发现 work
磁盘未自动挂载,而通过用户登录则会自动挂载改分区。这显然不是我想要的,以下是手动挂载改分区的操作步骤。
经测试,网上流传的,通过编辑文件 sudo vim /etc/fstab
增加挂载项目的方式无效,脚本如下:
1
| sudo echo "UUID=`diskutil info /dev/disk1s3 | grep "Volume UUID" | awk '{print $3}'` /Volumes/work hfs rw,auto" >> /etc/fstab
|
首先打开 磁盘工具
查看外置硬盘 设备
名称,然后执行以下挂载命令:
示例中设置名是:/dev/disk1s3
,注意更改。
1
| mkdir /Volumes/work && mount -t hfs /dev/disk1s3 /Volumes/work
|
追加此命令至 vim ping.sh
文件,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #!/bin/bash ping_success_status() { if ping -c 1 $IP >/dev/null; then echo "$IP Ping is successful." mkdir /Volumes/work && mount -t hfs /dev/disk1s3 /Volumes/work /Users/codezm/frp/frpc -c /Users/codezm/frp/frpc.ini break else echo "$IP Ping is failed." fi } IP="192.168.36.254" n=1 while (( $n <= 60 )); do echo "Ping $n times." ping_success_status sleep 1 (( n++ )) done
|
参考