将 ubuntu 中的短日期与 bash 脚本中其他虚拟服务器的日期进行比较
Compare short dates in ubuntu with date other virtual server in bash script
我有一个命令来获取虚拟服务器的创建日期,从行中获取信息
Created: Mon Mar 28 07:19:50 UTC 2022 (3 weeks ago)
:
root@hcloud-admin:/home/scripts# hcloud server describe Miguel-Zabbix-hel1-dc2 | awk 'NR == 4' | awk -F " " '{ print , , }'
输出:
Mon Mar 28
还有来自我的矿服务器主机的 hcloud
CLI 日期:
root@hcloud-admin:/home/scripts# date +"%a %b %d"
Fri Apr 22
能否请您帮忙,是否可以使用 bash script
来比较这两个日期,以确定服务器创建后是否已经过了 10 天?
如果 10 天过去了,我想在 bash 脚本中使用命令 hcloud server poweroof Miguel-Zabbix-hel1-dc2
。
完整输出:
root@hcloud-admin:/home/scripts# hcloud server describe Miguel-Zabbix-hel1-dc2
ID: 191220000
Name: Miguel-Zabbix-hel1-dc2
Status: running
Created: Mon Mar 28 07:19:50 UTC 2022 (3 weeks ago)
Server Type: cpx11 (ID: 22)
ID: 22
Name: cpx11
Description: CPX 11
Cores: 2
Memory: 2 GB
Disk: 40 GB
Storage Type: local
Public Net:
IPv4:
IP: 11.111.111.111
Blocked: no
DNS: static.111.111.111.111.clients.your-server.de
IPv6:
IP: 0a99:4f9:p099:0d0b::/555
Blocked: no
Floating IPs:
No Floating IPs
Private Net:
No Private Networks
Volumes:
No Volumes
Image:
ID: 15512600
Type: system
Status: available
Name: ubuntu-20.04
Description: Ubuntu 20.04
Image size: -
Disk size: 5 GB
Created: Thu Apr 23 17:55:14 UTC 2020 (2 years ago)
OS flavor: ubuntu
OS version: 20.04
Rapid deploy: yes
Datacenter:
ID: 3
Name: hel1-dc2
Description: Helsinki 1 DC 2
Location:
Name: hel1
Description: Helsinki DC Park 1
Country: FI
City: Helsinki
Latitude: 60.169855
Longitude: 24.938379
Traffic:
Outgoing: 208 MB
Ingoing: 280 MB
Included: 22 TB
Backup Window: Backups disabled
Rescue System: disabled
ISO:
No ISO attached
Protection:
Delete: no
Rebuild: no
Labels:
Name: Zabbix
是的。这个有可能。诀窍是将两个 date/time 字符串都转换为“自纪元以来的秒数”格式(日期 +%s),然后比较结果。在 Linux 的现代版本中,'date' 命令可以解释任何格式合理的日期字符串并将其转换为各种格式:
date_1=$(hcloud server describe Miguel-Zabbix-hel1-dc2 | sed -n 's/^Created:\([^(]*\).*$//p')
seconds_1=$(date -s "${date_1}" +%s)
seconds_2=$(date +%s)
day_diff=$(((seconds_2 - seconds_1)/86400)) # Number of seconds in a day = 86,400.
请注意,$((...)) 结构仅进行整数运算,并且会向下舍入,因此您可能需要调整运算以满足您的具体需要。此外,这个简单的计算没有考虑任何日期计算的细微差别,例如夏令时或 leap-seconds 等。但对于您的情况,我怀疑这些是否非常重要。
此外,请注意我使用了 sed
而不是 awk
。 sed
对于这种类型的工作更简洁,但可能有点复杂,所以我会为你分解-n 's/^Created:\([^(]*\).*$//p'
参数:
-n
:默认不打印每一行
s/pat/rep/p
:如果在当前行找到pat
,替换为rep
并打印
在我们的例子中,pat
是:
^Created:
:行首 (^),后跟确切的字符串 'Created:'、
\(
: 开始回忆后面的内容,
[^(]*
:字符串'('中不属于(^)的任意字符([...]),重复0次或多次(*),
\)
: 停止记忆,
.*$
: 任意单个字符 (.) 重复 0 次或多次,后跟行尾 ($).
而rep
是
:记住的第一件事(即 Created:
之后和 (
之前的所有内容)。
我有一个命令来获取虚拟服务器的创建日期,从行中获取信息
Created: Mon Mar 28 07:19:50 UTC 2022 (3 weeks ago)
:
root@hcloud-admin:/home/scripts# hcloud server describe Miguel-Zabbix-hel1-dc2 | awk 'NR == 4' | awk -F " " '{ print , , }'
输出:
Mon Mar 28
还有来自我的矿服务器主机的 hcloud
CLI 日期:
root@hcloud-admin:/home/scripts# date +"%a %b %d"
Fri Apr 22
能否请您帮忙,是否可以使用 bash script
来比较这两个日期,以确定服务器创建后是否已经过了 10 天?
如果 10 天过去了,我想在 bash 脚本中使用命令 hcloud server poweroof Miguel-Zabbix-hel1-dc2
。
完整输出:
root@hcloud-admin:/home/scripts# hcloud server describe Miguel-Zabbix-hel1-dc2
ID: 191220000
Name: Miguel-Zabbix-hel1-dc2
Status: running
Created: Mon Mar 28 07:19:50 UTC 2022 (3 weeks ago)
Server Type: cpx11 (ID: 22)
ID: 22
Name: cpx11
Description: CPX 11
Cores: 2
Memory: 2 GB
Disk: 40 GB
Storage Type: local
Public Net:
IPv4:
IP: 11.111.111.111
Blocked: no
DNS: static.111.111.111.111.clients.your-server.de
IPv6:
IP: 0a99:4f9:p099:0d0b::/555
Blocked: no
Floating IPs:
No Floating IPs
Private Net:
No Private Networks
Volumes:
No Volumes
Image:
ID: 15512600
Type: system
Status: available
Name: ubuntu-20.04
Description: Ubuntu 20.04
Image size: -
Disk size: 5 GB
Created: Thu Apr 23 17:55:14 UTC 2020 (2 years ago)
OS flavor: ubuntu
OS version: 20.04
Rapid deploy: yes
Datacenter:
ID: 3
Name: hel1-dc2
Description: Helsinki 1 DC 2
Location:
Name: hel1
Description: Helsinki DC Park 1
Country: FI
City: Helsinki
Latitude: 60.169855
Longitude: 24.938379
Traffic:
Outgoing: 208 MB
Ingoing: 280 MB
Included: 22 TB
Backup Window: Backups disabled
Rescue System: disabled
ISO:
No ISO attached
Protection:
Delete: no
Rebuild: no
Labels:
Name: Zabbix
是的。这个有可能。诀窍是将两个 date/time 字符串都转换为“自纪元以来的秒数”格式(日期 +%s),然后比较结果。在 Linux 的现代版本中,'date' 命令可以解释任何格式合理的日期字符串并将其转换为各种格式:
date_1=$(hcloud server describe Miguel-Zabbix-hel1-dc2 | sed -n 's/^Created:\([^(]*\).*$//p')
seconds_1=$(date -s "${date_1}" +%s)
seconds_2=$(date +%s)
day_diff=$(((seconds_2 - seconds_1)/86400)) # Number of seconds in a day = 86,400.
请注意,$((...)) 结构仅进行整数运算,并且会向下舍入,因此您可能需要调整运算以满足您的具体需要。此外,这个简单的计算没有考虑任何日期计算的细微差别,例如夏令时或 leap-seconds 等。但对于您的情况,我怀疑这些是否非常重要。
此外,请注意我使用了 sed
而不是 awk
。 sed
对于这种类型的工作更简洁,但可能有点复杂,所以我会为你分解-n 's/^Created:\([^(]*\).*$//p'
参数:
-n
:默认不打印每一行s/pat/rep/p
:如果在当前行找到pat
,替换为rep
并打印
在我们的例子中,pat
是:
^Created:
:行首 (^),后跟确切的字符串 'Created:'、\(
: 开始回忆后面的内容,[^(]*
:字符串'('中不属于(^)的任意字符([...]),重复0次或多次(*),\)
: 停止记忆,.*$
: 任意单个字符 (.) 重复 0 次或多次,后跟行尾 ($).
而rep
是
Created:
之后和(
之前的所有内容)。