bash - 没有人在服务器上时关闭计算机
问题描述
我在我的塔上运行了多个 minecraft 服务器,并试图找出一个在后台运行的脚本,该脚本将检查过去 30 分钟内是否没有人在任何服务器上,然后关闭服务器和计算机。然后,当有人想加入时,我将使用我的树莓派唤醒局域网。
我想出了如何使用 rcon 和网络唤醒来关闭服务器。我遇到的主要问题是弄清楚关机。我唯一能找到的是如何使用
lsof -iTCP:25565 -sTCP:ESTABLISHED
但我不知道从那里去哪里。我使用的是 Linux 机器,我对 bash 文件的大部分经验来自设置服务器,仅此而已。您可以提供的任何帮助将不胜感激!谢谢!
解决方案
然后是这样的:
#!/bin/bash
PORTLIST="25565 25566 25567"
TIMEOUT=3600
let T=0
declare -i START
declare -i NOW
START=$(date +%s)
while [ $T -lt $TIMEOUT ] ; do
sleep 30
for PORT in $PORTLIST ; do
if lsof -iTCP:$PORT -sTCP:ESTABLISHED >/dev/null ; then
T=0
START=$(date +%s)
# starting over
continue 2
fi
done
NOW=$(date +%s)
let T=NOW-START
done
echo timeout
PORTLIST 和 TIMEOUT 是唯一要更改的变量
推荐阅读
- hashicorp-vault - 仅允许列出角色子集的策略
- azure - Azure Devops YAML Pipeline Trigger 未触发带有正斜杠的分支
- python - 模型功能的 Django 过滤器
- spring-security - spring-cloud-security:通过主体值识别http会话处理中的单个用户?用户名属性的危险设置?
- javascript - 如何在更改事件中获取 mu 以将一个字段的输入填充到另一个字段的输入中
- c# - 如何使用 asp.net mvc web 表单使按钮更靠近另一个按钮?
- python - 包含无时如何将字典拆分为列
- python - 为分布式系统创建副本套接字服务器
- r - R:执行一个函数/脚本作为包安装的一部分
- r - base r 正则表达式在一行中的预定义组之间拆分