## 0.前期准备

在上一篇文章 [06.设置流量整形](./06.设置流量整形.md) 中,已经设置了 QoS ,现在开始设置系统定时任务。  

**注意:**  
**如果后续将根据文章 [09.设置系统参数](./09.设置系统参数.md#4设置系统账户) 创建额外的系统管理员账户,建议优先执行账户相关设置。**  
**由于涉及运行权限,因此在创建定时器和脚本时,请使用具有管理权限的系统账户。**  

RouterOS 提供了强大的脚本能力,搭配系统的定时器功能,可以实现一些高级自动化操作。  

在正式开始之前需要做一些准备工作:  

- 要使用 RouterOS 发送邮件功能,需要准备一个邮箱并开启 `SMTP` 服务,推荐使用 QQ 邮箱或 163 邮箱  

- 对于使用 **CHR 版本** RouterOS 的软路由  
    - 系统自动更新脚本,请查阅文件 [ros_sys_upgrade_worker.chr.conf](./src/upgrade/ros_sys_upgrade_worker.chr.conf)  
    - 证书自动更新脚本,请查阅文件 [ros_certs_update_worker.conf](./src/certificates/ros_certs_update_worker.conf)  
    - 系统日志邮件脚本,请查阅文件 [ros_email_log_worker.conf](./src/email/ros_email_log_worker.conf)  
    - 系统资源邮件脚本,请查阅文件 [ros_email_res_worker.chr.conf](./src/email/ros_email_res_worker.chr.conf)  


- 对于使用 **Mikrotik 原生** RouterOS 的硬路由  
    - 系统自动更新脚本,请查阅文件 [ros_sys_upgrade_worker.native.conf](./src/upgrade/ros_sys_upgrade_worker.native.conf)  
    - 证书自动更新脚本,与 CHR 版本相同  
    - 系统日志邮件脚本,与 CHR 版本相同  
    - 系统资源邮件脚本,与 CHR 版本略有不同,请查阅文件 [ros_email_res_worker.native.conf](./src/email/ros_email_res_worker.native.conf)  

## 1.定时器和脚本初始化

定时器和脚本配置较为复杂,因此推荐使用 RouterOS 自带的终端工具 `Terminal` 进行配置。  

如果使用第三方终端工具登录 RouterOS ,`ssh` 命令演示如下。  

```bash
## 使用管理员账户 admin 进行 SSH 登录
$ ssh admin@172.16.1.1

## 修改了 SSH 服务端口时的 SSH 登录
## 演示端口号为 5022
$ ssh admin@172.16.1.1 -p 5022
```

RouterOS 的定时器将会创建 6 个,分别为:  

1. 定时触发系统日志邮件脚本  

2. 定时触发系统资源邮件脚本  

3. 定时触发系统自动更新脚本  

4. 定时触发证书自动更新脚本  

5. 定时断开 PPPoE 连接  

6. 定时重连 PPPoE 连接  

RouterOS 的脚本将会创建 4 个,分别为:  

1. 系统日志邮件脚本  

2. 系统资源邮件脚本  

3. 系统自动更新脚本  

4. 证书自动更新脚本  

在 RouterOS 的命令行环境下,将以下命令一次性全部粘贴到 `CLI` 中执行,即可初始化定时器和脚本。  

如果不便复制代码,请查阅文件 [ros_schedule_script.pppoe.conf](./src/schedule/ros_schedule_script.pppoe.conf) 。  

```bash
/system scheduler

add comment="sysconf: system log email" interval=45m name=system-log-timer on-event="/system script run email-log-worker" policy=read,write,policy,test start-time=00:00:00
add comment="sysconf: system resource email" interval=6h name=system-res-timer on-event="/system script run email-res-worker" policy=read,write,policy,test start-time=00:05:00

add comment="sysconf: system auto upgrade" interval=1d name=system-upgrade-timer on-event="/system script run sys-upgrade-worker" policy=reboot,read,write,policy,password start-time=02:55:00
add comment="sysconf: system certs update" interval=15d name=certs-update-timer on-event="/system script run certs-update-worker" policy=reboot,read,write,policy,password start-time=03:30:00

add comment="pppoeconf: disable pppoe-out1" interval=3d name=disable-pppoe-timer on-event="/interface disable pppoe-out1" policy=write start-time=04:00:00
add comment="pppoeconf: enable pppoe-out1" interval=3d name=enable-pppoe-timer on-event="/interface enable pppoe-out1" policy=write start-time=04:00:10


/system script

add comment="sysconf: system log email" dont-require-permissions=no name=email-log-worker policy=read,write,policy,test source=""
add comment="sysconf: system resource email" dont-require-permissions=no name=email-res-worker policy=read,write,policy,test source=""

add comment="sysconf: system auto upgrade" dont-require-permissions=no name=sys-upgrade-worker policy=reboot,read,write,policy,password source=""
add comment="sysconf: system certs update" dont-require-permissions=no name=certs-update-worker policy=reboot,read,write,policy,password source=""
```

其中 `interval` 参数为定时器执行周期,`start-time` 参数为每天的触发时刻,各脚本时间设置汇总如下。  

|名称|开始时间|执行周期|说明|
|--|--|--|--|
|system-log-timer|00:00:00|45m|每 `45分钟` 执行一次系统日志触发器|
|system-res-timer|00:05:00|6h|每 `6小时` 执行一次系统资源触发器|
|system-upgrade-timer|02:55:00|1d|每 `1天` 执行一次系统更新触发器|
|certs-update-timer|03:30:00|15d|每 `15天` 执行一次证书更新触发器|
|disable-pppoe-timer|04:00:00|3d|每 `3天` 执行一次断连 PPPoE|
|enable-pppoe-timer|04:00:10|3d|每 `3天` 执行一次重连 PPPoE|
 
命令执行完毕后,打开 Winbox ,点击左侧导航 `System` 菜单的子菜单 `Scheduler` ,可以看到已有 6 个定时器。  

![定时器](img/p07/wb_scheduler.jpeg)

如果需要禁用某个定时器,使用鼠标 **单击** 选中定时器,点击 ` × ` 按钮,即可禁用该定时器。  

![停用某定时器](img/p07/wb_scheduler_disable.jpeg)

## 2.完善系统更新脚本

点击 Winbox 左侧导航 `System` 菜单的子菜单 `Scripts` ,可以看到已有 4 个脚本。  

![脚本待完善](img/p07/wb_scripts_red.jpeg)

但脚本条目均为红色,因为之前的命令只设置了脚本的基本参数,还未添加脚本代码。  

根据所使用的 RouterOS 的类型,从以下两个系统自动更新脚本中选择合适的版本,并复制其代码:  

- CHR 使用:[ros_sys_upgrade_worker.chr.conf](./src/upgrade/ros_sys_upgrade_worker.chr.conf)  

- 官方硬件使用:[ros_sys_upgrade_worker.native.conf](./src/upgrade/ros_sys_upgrade_worker.native.conf)  

鼠标 **双击** 系统自动更新脚本 `sys-upgrade-worker` ,进入脚本配置界面,在 `Source` 处粘贴脚本代码。   

![粘贴自动更新脚本](img/p07/os_upgrade_script.jpeg)

脚本输入完成后,`sys-upgrade-worker` 脚本将转变为正常状态。  

![自动更新脚本完成](img/p07/os_upgrade_script_ok.jpeg)

## 3.完善证书更新脚本

若使用了 RouterOS 的 DoH 或 Adlist 功能,则需自动化更新根证书以避免相关功能证书验证失败。  

与设置系统自动更新脚本类似,需复制 [ros_certs_update_worker.conf](./src/certificates/ros_certs_update_worker.conf) 中的脚本代码。  

鼠标 **双击** 证书自动更新脚本 `certs-update-worker` ,进入脚本配置界面,在 `Source` 处粘贴脚本代码。   

![粘贴自动更新脚本](img/p07/certs_upgrade_script.jpeg)

## 4.系统邮件通知

### 4.1.准备发信邮箱

RouterOS 支持使用 `SMTP` 协议进行邮件发送,推荐使用国内的QQ邮箱或163邮箱。  

需要说明的是,这里使用邮箱主要在发送 **系统日志信息** 和 **系统资源信息** ,如果无需邮件发送功能,可以跳过本段内容。  

本文以163邮箱作为演示,登录163邮箱后,点击顶部 `设置` 菜单的子菜单 `POP3/SMTP/IMAP` 。  

![163邮箱smtp设置](img/p07/163_smtp_menu.png)

点击 `POP3/SMTP服务` 右侧的 `开启` 。  

![163邮箱开启smtp](img/p07/163_enable_smtp.png)

根据提示信息进行安全认证之后,就能拿到一个第三方客户端的 **授权密码** ,该密码只出现一次,因此需要将密码复制出来并保存。  

`使用设备` 处填写一个备注,以便后续区分。  

![163邮箱smtp授权密码](img/p07/163_smtp_key.png)

然后找到 `SMTP` 服务器地址 `smtp.163.com` ,并记录下 `SSL` 端口号 `465` 。  

![163邮箱协议与端口](img/p07/163_protocol_port.png)

### 4.2.设置 RouterOS 邮件服务

回到 Winbox,点击左侧导航 `Tools` 菜单的子菜单 `Email` ,对邮件服务进行设置。  

|参数|值|说明|
|--|--|--|
|Server|`smtp.xxx.com`| SMTP 服务器地址,例如 `smtp.163.com`|
|Port|`465`|SMTP服务端口|
|TLS|`yes`|使用 SSL |
|From|`your-email-x@xxx.com`|发件箱地址,例如 `fox@163.com`|
|User|`your-email-x@xxx.com`|账户,与 `From` 相同,例如 `fox@163.com`|
|Password|************|邮箱的授权密码|

参考表格中的内容,`From` 和 `User` 均为刚开启了 `SMTP` 服务的邮箱地址,`Password` 为刚获取的授权密码,设置完成后点击 `OK` 。  

![邮件服务设置](img/p07/wb_email_config.jpeg)

### 4.3.完善系统日志邮件脚本

复制 [ros_email_log_worker.conf](./src/email/ros_email_log_worker.conf) 中的脚本代码,并使用文本编辑器工具对脚本中有关 **邮箱部分** 参数进行修改。  

```bash
## Resolve Mail Server
:local MailServer "<smtp.xxx.com>";            # Need to customize
:local MailPort "465";
:local MailTls "yes";
:local SendFrom "<your-email-x@xxx.com>";      # Need to customize
:local SendTo "<your-email-y@yyy.com>";        # Need to customize
:local MailIp;
:set MailIp [:resolve $MailServer ];
:delay 1s;
## Resolve End
```

**注意:**  
**Windows 环境下的一些文本编辑工具会在编辑文本时增加额外“空格”,并修改“换行符”。**  
**推荐使用 [Notepad3](https://www.rizonesoft.com/downloads/notepad3/) 、[Visual Studio Code](https://code.visualstudio.com/Download) 这类代码编辑器。**  

点击 Winbox 左侧导航 `System` 菜单的子菜单 `Scripts` ,鼠标 **双击** 系统日志邮件脚本 `email-log-worker` 。  

进入脚本配置界面后,在 `Source` 处粘贴脚本代码。  

![系统日志邮件脚本](img/p07/email_log_script.jpeg)

### 4.4.完善系统资源邮件脚本

同样,根据所使用的 RouterOS 的类型,从以下两个系统资源邮件脚本中选择合适的版本,并复制其代码:  

- CHR 使用:[ros_email_res_worker.chr.conf](./src/email/ros_email_res_worker.chr.conf)  

- 官方硬件使用:[ros_email_res_worker.native.conf](./src/email/ros_email_res_worker.native.conf)  

与 **系统日志邮件脚本** 一样,需要修改 **邮箱部分** 参数。  

若实际网络环境中没有使用 PPPoE 拨号,则需要额外修改有关 **外网接口部分** 参数。  

```bash
## Fox RouterOS Notification
:local Project "Resource Report";
:local WanInterface "pppoe-out1";              # Need to customize
:local UpdateChannel "stable";
```

鼠标 **双击** 系统资源邮件脚本 `email-res-worker` ,进入脚本配置界面,在 `Source` 处粘贴脚本代码。  

![系统资源邮件脚本](img/p07/email_res_script.jpeg)

设置完成后,如果之前禁用了两个系统邮件脚本的定时器,现在可以重新将其启用。  

点击 Winbox 左侧导航 `System` 菜单的子菜单 `Scheduler` ,使用鼠标 **单击** 选中定时器,点击 ` ✓ ` 按钮进行启用。  

![启用某定时器](img/p07/wb_scheduler_enable.jpeg)

至此 RouterOS 设置定时任务步骤完成,系统会定时自动升级,并将系统的日志、资源信息发送给指定的邮箱。  

结合 PVE 的周期性重启及备份策略,保证了路由器系统的健康运行。