我是一个绝对的脚本新手,但有人要求我创建一个脚本来检查用户登录 Linux 服务器的时间,如果超过,比如说 5 小时,则需要一个退出状态可以被我们的监控系统接收并发出警报。
我不希望有人为我编写脚本(我不是骗子),但我会非常感谢尽可能多的建议。
有没有人有编写执行此操作或类似操作的 shell 脚本的经验?
提前谢谢了。
答案1
查看它们使用的程序who
和w
文件utmp
。wtmp
与其编写一个询问文件本身的程序(其中信息以二进制形式保存),不如编写一些解析这些程序之一的输出的脚本可能更容易。
man who
等了解更多信息。
答案2
你考虑过这个last
命令吗?
答案3
这是 Nagios 插件的日常费用。如果您使用其他东西,您将必须弄清楚监控系统对您的插件有何要求。 Nagios 有一个记录在案的接口,用于说明写入标准输出的内容以及插件的退出状态应该是什么。
开发 Nagios 插件的一个起点是人们已经完成了一些工作的地方。例如,参见Hari Sekhon 的 Nagios 插件合集,其中有一个check_users.sh
脚本“旧”部分它查看活动登录表,但不强加您想要强加的规则。有可能其他人已经开发出一些东西来完成您想要的事情。 Nagios 提供的版本有许多变体和增强版本check_users
,例如多年来人们编写的。其中一些位于 Nagios Exchange 中。
您可以看到 M. Sekhon 的脚本$userlist
通过解析命令的输出来构造字符串who
。实际上只是一行。您想要的是对命令输出进行一些更复杂的处理who
,而您必须编写这些处理。
......或者用编程语言编写的程序实际上可以直接读登录数据库,而不是解析有点不稳定的机制人类可读的(不是机器可解析的)who
/w
命令的输出,并进行相当简单的输出生成和退出状态计算。 Nagios 插件不必用 shell 脚本编写,将工具的人类可读输出解析回机器可处理的形式是一个简单的方法臭名昭著Unices 和 Linux 操作系统上的错误来源。将其与您将要参与的事实结合起来其他臭名昭著的错误来源,使用人类可读形式的日期/时间算术,结果是 shell 脚本在这里变得非常脆弱。
进一步阅读
- 乔纳森·德博因·波拉德 (2018)。Unix 登录数据库。常见答案。
- https://unix.stackexchange.com/a/437762/5132