---
author: Magesh Maruthamuthu
category: 技术
comments_data:
- date: '2019-10-20 21:01:28'
  message: 非常详细的教程，请问需要输入邮箱账号密码吗？
  postip: 218.91.27.19
  username: 来自江苏扬州的 Chrome 77.0|Windows 10 用户
count:
  commentnum: 1
  favtimes: 1
  likes: 0
  sharetimes: 0
  viewnum: 7019
date: '2019-10-13 11:47:35'
editorchoice: false
excerpt: 出于一些原因，你可能需要每月收集一次 Linux 系统运行时间报告。
fromurl: https://www.2daygeek.com/bash-script-generate-linux-system-uptime-reports/
id: 11455
islctt: true
largepic: /images/p/201910/13/114727no80y3hzg3og2rhg.jpg
permalink: /article-11455-1.html
pic: /images/p/201910/13/114727no80y3hzg3og2rhg.jpg.thumb.jpg
related: []
reviewer: wxy
selector: lujun9972
summary: 出于一些原因，你可能需要每月收集一次 Linux 系统运行时间报告。
tags:
- 运行时间
thumb: false
title: 生成 Linux 运行时间报告的 Bash 脚本
titlepic: true
translator: geekpi
updated: '2019-10-13 11:47:35'
---

![](/images/p/201910/13/114727no80y3hzg3og2rhg.jpg)


出于一些原因，你可能需要每月收集一次 [Linux 系统运行时间](https://www.2daygeek.com/linux-system-server-uptime-check/)报告。如果是这样，你可以根据需要使用以下 [bash 脚本](https://www.2daygeek.com/category/shell-script/) 之一。


我们为什么要收集这份报告？在一段时间后重启 Linux 服务器是解决某些未解决问题的好方法。（LCTT 译注：本文这些观点值得商榷，很多服务器可以稳定运行几千天，尤其是有了内核热补丁之后，启动并不是必须的。）


建议每 180 天重新启动一次。但时间段也许取决于你公司的政策。如果你已经长时间运行服务器而没有重启。这可能导致服务器上出现一些性能或内存问题，我在许多服务器上都注意到了这一点。


这些脚本一次性提供了所有系统运行报告。


### 什么是 uptime 命令


`uptime` 命令将告诉你系统已经运行了多长时间。它在一行中显示以下信息：当前时间、系统运行了多长时间、当前登录了多少用户以及过去 1、5 和 15 分钟的平均系统负载。


### 什么是 tuptime?


[tuptime](https://www.2daygeek.com/linux-tuptime-check-historical-uptime/) 是用于报告系统的历史和统计运行时间的工具，可在重启之间保存。它类似于 `uptime` 命令，但输出更有趣。


### 1）检查 Linux 系统运行时间的 Bash 脚本


该 bash 脚本将收集所有服务器正常运行时间，并将报告发送到给定的电子邮箱地址。


请替换为你的电子邮箱地址，而不是用我们的，否则你将不会收到邮件。



```
# vi /opt/scripts/system-uptime-script.sh

#!/bin/bash
> /tmp/uptime-report.out
for host in cat /tmp/servers.txt
do
echo -n "$host: "
ssh $host uptime | awk '{print $3,$4}' | sed 's/,//'
done | column -t >> /tmp/uptime-report.out
cat /tmp/uptime-report.out | mail -s "Linux Servers Uptime Report" "2daygeek@gmail.com"
```

给 `system-uptime-script.sh` 设置可执行权限。



```
$ chmod +x /opt/scripts/system-uptime-script.sh
```

最后运行 bash 脚本获取输出。



```
# sh /opt/scripts/system-uptime-script.sh
```

你将收到类似以下的报告。



```
# cat /tmp/uptime-report.out

192.168.1.5:          2      days
192.168.1.6:          15     days
192.168.1.7:          30     days
192.168.1.8:          7      days
192.168.1.9:          67     days
192.168.1.10:         130    days
192.168.1.11:         23     days
```

### 2）检查 Linux 系统是否运行了 30 天以上的 Bash 脚本


此 bash 脚本会收集运行 30 天以上的服务器，并将报告发送到指定的邮箱地址。你可以根据需要更改天数。



```
# vi /opt/scripts/system-uptime-script-1.sh

#!/bin/bash
> /tmp/uptime-report-1.out 
for host in cat /tmp/servers.txt
do
echo -n "$host: "
ssh $host uptime | awk '{print $3,$4}' | sed 's/,//'
done | column -t >> /tmp/uptime-report-1.out
cat /tmp/uptime-report-1.out | awk ' $2 >= 30' > /tmp/uptime-report-2.out
cat /tmp/uptime-report-2.out | mail -s "Linux Servers Uptime Report" "2daygeek@gmail.com"
```

给 `system-uptime-script-1.sh` 设置可执行权限。



```
$ chmod +x /opt/scripts/system-uptime-script-1.sh
```

最后添加一条 [cronjob](https://www.2daygeek.com/crontab-cronjob-to-schedule-jobs-in-linux/) 来自动执行。它会在每天早上 7 点运行。



```
# crontab -e

0 7 * * * /bin/bash /opt/scripts/system-uptime-script-1.sh
```

**注意：** 你会在每天早上 7 点会收到一封电子邮件提醒，它是昨天的详情。


你将收到类似下面的报告。



```
# cat /tmp/uptime-report-2.out

192.168.1.7:          30     days
192.168.1.9:          67     days
192.168.1.10:         130    days
```



---


via: <https://www.2daygeek.com/bash-script-generate-linux-system-uptime-reports/>


作者：[Magesh Maruthamuthu](https://www.2daygeek.com/author/magesh/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出