Mac launchctl 自动后台任务


前言

自从有了一个 mac mini 后,我就有了一个可以长时间不关机,不移动,不睡眠的主机,或者说,我可以把它当做一个私有的微型服务器。 正如前文所言,这个服务器将会至少运行 Alist 云盘,当然也可以顺便远程 ssh 用于跑代码。

由于在这个过程中踩了好一些坑,遂写本文记录。

ssh 排雷

mac 是有集成 ssh 的,所以只需要在系统设置中打开 22 端口的远程登录权限就可以 ssh 连接上了。

可是因为我 ssh 连接 GitHub 的时候遇到了 kex_exchange_identification error,所以尝试了更改 sshd 的配置。不过有一回改配置改炸掉了,GitHub 能连接上了,但是其他设备连接本机却出现了 kex_exchange_identification error: connection reset

我尝试了很多种方法,包括检查白名单黑名单等等,Google 和 StackOverflow 都搜索过,但是一直没有解决问题。

后来偶然有一天我想到,如果能直接输出 ssh 的日志不就能知道有什么问题了吗!

果然,我在 Stack Overflow 上搜索 mac ssh log,找到了 logging - Where to find sshd logs on MacOS sierra - Stack Overflow。第一高赞回答 (by jerrythea) 就完美解决了我的问题。

当我获取到日志信息后,立马就发现了问题所在:sshd_config 配置重复定义了一个量!删掉这一行后,ssh 立马恢复正常!

launchctl 排雷

在上一篇文章配置 Alist 的时候,配置了守护进程,不过我确实觉得那个守护进程好像根本没有作用。于是就长期把 Alist 挂在前台(我还以为只能这样)。

后来我在设置一个定时任务的时候,就发现了大问题。不仅定时无效,而且 launchctl start 也不能正常运行。

遂上网搜索,在知乎上找到一篇非常完美的回答 Mac 使用 Launchctl 设置后台定时任务无效的解决方法 - 知乎。其中最最关键的一步就是下载一个 launchcontrol 检测和管理所有的 launchctl tasks

使用 mac 的 homebrew 安装:

brew install launchcontrol

又是瞬间发现问题瞬间觉悟!

这下我不仅定时任务成功了,Alist 也不用挂前台了,cpolar 也可以长期运行了。

参考资料

  1. logging - Where to find sshd logs on MacOS sierra - Stack Overflow
  2. Mac 使用 Launchctl 设置后台定时任务无效的解决方法 - 知乎

–4dd916d4ef194170468eaba725c0a733–


评论
  目录