我希望我的 bash 脚本能够检测是否已经存在具有特定名称的 AWS RDS 实例。
这是我尝试过的:
#!/usr/bin/env bash
DBINSTANCEIDENTIFIER=greatdb
EXISTINGINSTANCE=$(aws rds describe-db-instances \
--db-instance-identifier="$DBINSTANCEIDENTIFIER" \
--输出文本\
)
我希望得到一个空列表,或者结果为零 - 但我收到一条错误消息:
调用 DescribeDBInstances 操作时发生错误 (DBInstanceNotFound):未找到 DBInstance greatdb。
有谁知道如何在没有错误消息的情况下正确找出实例是否存在?
我们今天在 AWS 环境中遇到了 nginx 解析器的问题。根据 nginx 日志文件,在 DNS 记录更改后,nginx 没有解析到正确的服务器。
DNS最初解析:
webservers.ourservers.local A 10.0.0.5
webservers.ourservers.local A 10.0.1.8
Run Code Online (Sandbox Code Playgroud)
...但是一旦这些 IP 地址之一发生更改,nginx 就没有得到更改 - 并不断尝试访问过时的 IP 地址 - 远长于 60 秒 ttl。
根据 nginx.org/en/docs/http/ngx_http_core_module.html#resolver,nginx 解析器仅缓存 ttl 的答案 - 或者,在我们的例子中,为配置的时间。
我的同事将resolver线路从位置块移动到服务器块,但它没有帮助。我们需要重新启动 nginx 以强制它解析到新的 ip。
nginx配置:
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$scheme - $http_x_client_ip - $remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;
server {
listen 8080 default;
set $OUR_ROOT …Run Code Online (Sandbox Code Playgroud) domain-name-system nginx reverse-proxy load-balancing amazon-web-services
根据 logrotate 手册(https://manpages.debian.org/jessie/logrotate/logrotate.8.en.html),logrotate 应该调用一个脚本并将旋转文件的文件名作为脚本的第一个参数使用此配置:
/var/log/piwik/*.log {
missingok
postrotate
/root/createStats.sh > /dev/null
endscript
}
Run Code Online (Sandbox Code Playgroud)
createStats.sh 脚本仅用于测试目的:
#!/bin/bash
echo "L: $1"
FNAME=/my.log
D=$(date)
echo "M $D ; $0 ; $1 ; $2" >> $FNAME
Run Code Online (Sandbox Code Playgroud)
不幸的是,我的 /my.log 文件不包含 $1(或 $2)的任何值:
M Tue 26 Dec 05:16:38 CET 2017 ; /root/createStats.sh ; ;
M Tue 26 Dec 05:16:38 CET 2017 ; /root/createStats.sh ; ;
Run Code Online (Sandbox Code Playgroud)
我可能会遗漏一些东西。有没有人有想法?
我的 logrotate 版本是 3.8.7。