唠唠闲话

自动联网脚本,开机启动后自动挂载磁盘,内网穿透服务开机自启等。

服务器重启后,或者间隔一段时间,会自动断网,此时需要重新运行,登录服务器脚本。

以服务器自动联网为例,介绍几种方式:

  1. 后台运行脚本
  2. crontab 定时任务
  3. systemd 服务

后台运行脚本

一个最简单省事的方式,tmux + shell 编写自动操作脚本。假设 mylogin 为登录脚本,编写 autologin.sh 文件:

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
while true; do
if ping -c 2 -w 3 www.baidu.com >/dev/null; then
echo 网络正常:`date`
else
echo 网络异常:`date`
echo 执行登录脚本:`mylogin`
fi
sleep 60 # 等待间隔:1min
done

运行 tmux,在后台运行该文件,每隔 10min 检测一次网络状态。当然也可以用 nohup 运行,通过 nohup 日志查看运行状态。

crontab 定时任务

crontab 是 Unix 和 Unix 类操作系统中用于设置周期性执行任务的工具。crontab 的名字来自 “cron table”,因为它允许用户编辑一个表格(crontab 文件),用于定义任务的执行计划。Cron 是系统守护进程,它按照 crontab 文件中定义的时间表来执行任务。任务可以是任何可以在 shell 中运行的命令或脚本。

同样地,先编写脚本,并放到 /srv/network-login 目录下,其中 mylogin 为登录脚本:

1
2
3
4
5
6
7
8
#!/bin/bash
log_file=/srv/network-login/net.log
if ping -c 2 -w 3 www.baidu.com >/dev/null; then
echo 网络正常:`date` >> $log_file
else
echo 网络异常:`date` >> $log_file
echo 执行登录脚本:`mylogin` >> $log_file
fi

输入 crontab -e,并添加规则:

1
*/10 * * * * /srv/network-login/login.sh

此时系统会每隔 10min 执行一次 mylogin 脚本,每次重启后都会自动执行。

注:首次执行 crontab 会提示选择编辑器,后续如果需要更换编辑器,输入 select-editor 即可。

时间规则

crontab 任务的时间表由五个字段组成,分别代表分钟、小时、日期、月份和星期几。每个字段可以接受一个数字或者特定的字符,举几个例子:

分钟 小时 日期 月份 星期 含义
* * * * * 每分钟运行一次
0 0 * * * 每天凌晨(00:00)运行
0 9 * * 1 每周一上午 9 点运行
0 12 1 * * 每月第一天中午 12 点运行
15 * * * * 每小时的第 15 分钟运行
*/15 * * * * 每 15 分钟运行一次
0 * * * 1-5 工作日(周一至周五)每小时运行
0 0 1 1 * 每年 1 月 1 日午夜运行

上边表格展示了 crontab 的时间设置及其对应的执行效果。通过使用不同的时间组合,可以灵活地安排定时任务以满足特定的需求。

systemd 服务