0%

MacOS开机自动挂载硬盘&frpc

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
# 会显示进程号 和 状态码, 进程号 非 - 表示启动了, 状态码 非 0 表示发生了错误

执行成功后,重启电脑,在手机端通过 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

参考