跳到主要内容

通过任务计划执行脚本

出门在外,如果家里的群晖突然断电或遭遇其他情况重启了,那么恢复对自建服务的访问就变成了一个棘手的问题,比如 FRP 内网穿透服务。

当然像这些服务是可以配置成系统自启服务的,但最近我发现有一次更新系统后我之前配置的 FRP 服务就不见了,估计是系统更新时把系统服务目录的文件给覆盖了,所以这种方法并不稳定。

其实最稳定的就是群晖的网页了,只要群晖开机就可以访问,虽然不能直接执行 SSH 命令,但可以间接通过任务计划执行预先配置好的脚本。

备注

直接通过 SSH 执行命令固然可行,且比本文提到的方法更简单,但适用性没有通过任务计划来执行的强。只能说各有各的优点,把这种方式作为备用方式可能会更好一点。

添加启动脚本

以启动 FRP 服务为例,点击新增 - 触发的任务 - 用户定义的脚本。

常规选项卡中填写任务名称,用户账号使用 root 身份,事件选择开机事件。

切换到任务设置选项卡,在用户定义的脚本输入相关命令即可。

如果脚本运行失败,还可以通过保存脚本输出结果来排错。

通过这种方式,我们就可以在任何能够访问到群晖网页的情况下执行我们预定义的脚本了。

添加关闭脚本

启动服务并非终点,某些情况下可能需要调整服务的配置文件,这时就需要先关闭服务后再启动。

以 FRP 服务为例,首先查看正在运行的服务的进程号

对于将要设计的脚本而言,4530这个进程号是唯一需要的内容,因此通过以下命令获取:

将上面的命令拆分,就可以应用到其他服务上。通过|grep frp获取与 frp 相关的进程,通过|grep frpc.ini获取实际运行的脚本对应的进程,最后通过|grep -v grep|awk '{print $2}'获取输出结果第二列的值。

有了上述基础,这个关闭服务的脚本就可以很轻松地写出来了:

#!/bin/sh

PID=`ps -ef |grep frp|grep frpc.ini|grep -v grep|awk '{print $2}'`
if [ x"$PID" != x"" ]; then
kill $PID
fi

最后为这个脚本添加执行权限,SSH 命令行测试没有问题之后,将其添加到任务计划中即可。

通过以上的配置,当我们出门在外无法使用 SSH 访问家里的群晖时,就可以通过任务计划来执行对应的脚本。如果有配置文件需要修改,则搭配 File Station 也能轻松完成。