分类 Linux 下的文章

postgres统计指定数据库+指定表+指定时间段 新增条数 脚本

#!/bin/bash
# 统计 a001~a004 中 table_name 表当月新增总数,并逐库写入结果文件

# ===== 配置区 =====
DBS=("a001" "a002" "a003" "a004")          # 要统计的数据库
PGHOST="127.0.0.1"
PGPORT="5432"
PGUSER="postgres"
export PGPASSWORD="your_password"

OUT_DIR="/tmp/table_count"               # 结果输出目录
SUMMARY_FILE="${OUT_DIR}/summary.txt"      # 汇总文件
RESULT_FILE="${OUT_DIR}/result_detail.txt" # 明细汇总文件(数据库名+数量)

# 时间字段名(如为 create_time 请修改)
TIME_COL="create_time"

# ===== 初始化 =====
mkdir -p "$OUT_DIR"
TOTAL=0

# 清空/初始化文件
: > "$SUMMARY_FILE"
: > "$RESULT_FILE"

# 写入标题行
echo "数据库名,当月新增数" >> "$RESULT_FILE"

# ===== 循环统计 =====
for DB in "${DBS[@]}"; do
    # 查询当月新增数 如为时间戳则自行修改
    CNT=$(psql -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" -d "$DB" -t -A -c "
        SELECT COUNT(*) FROM table_name
        WHERE ${TIME_COL} >= date_trunc('month', CURRENT_DATE)
          AND ${TIME_COL} <  date_trunc('month', CURRENT_DATE) + INTERVAL '1 month';
    ")
    CNT=$(echo "$CNT" | tr -d '[:space:]')   # 去空白
    [ -z "$CNT" ] && CNT=0                    # 防空值

    # 1) 每个库单独一个文件:<数据库名>.txt
    echo "数据库名: $DB"        >  "${OUT_DIR}/${DB}.txt"
    echo "当月新增数: $CNT" >> "${OUT_DIR}/${DB}.txt"

    # 2) 明细汇总文件追加一行:数据库名,数量
    echo "${DB},${CNT}" >> "$RESULT_FILE"

    # 3) 控制台打印
    echo "数据库 $DB 当月新增: $CNT"

    # 4) 累加总数
    TOTAL=$((TOTAL + CNT))
done

# ===== 写入汇总 =====
{
    echo "=============================="
    echo "统计时间: $(date '+%Y-%m-%d %H:%M:%S')"
    echo "统计范围: 当前月份"
    echo "=============================="
    echo "各库明细:"
    cat "$RESULT_FILE"
    echo "=============================="
    echo "四库当月新增总数: $TOTAL"
} | tee -a "$SUMMARY_FILE"

echo ""
echo "结果文件已生成:"
echo "  - 汇总文件:   $SUMMARY_FILE"
echo "  - 明细文件:   $RESULT_FILE"
echo "  - 各库单独文件: ${OUT_DIR}/a001.txt, a002.txt, a003.txt, a004.txt"

使用sshpass实现ssh、scp等免密登录

ssh 登陆不能在命令行中指定密码,sshpass 的出现则解决了这一问题。它允许你用 -p 参数指定明文密码,然后直接登录远程服务器,它支持密码从命令行、文件、环境变量中读取。

安装:yum install -y sshpass

sshpass [-f|-d|-p|-e] [-hV] command parameters

-f filename   Take password to use from file
-d number     Use number as file descriptor for getting password
-p password   Provide password as argument (security unwise)
-e            Password is passed as env-var "SSHPASS"
With no parameters - password will be taken from stdin
-P prompt     Which string should sshpass search for to detect a password prompt
-v            Be verbose about what you're doing
-h            Show help (this screen)
-V            Print version information

如:sshpass -p 'root' scp /opt/file.txt root@192.168.126.135:/home

NFS简介

NFS基本简介

NFS(Network File System),它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

NFS服务的端口开在2049,但由于文件系统非常复杂。因此NFS还有其他的程序去启动额外的端口,这些额外的用来传输数据的端口是随机选择的,是小于1024的端口;既然是随机的那么客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?这时就需要通过远程过程调用(Remote Procedure Call,RPC)协议来实现了RPC服务(portmap 或rpcbind服务)。

- 阅读剩余部分 -

CentOS 防火墙FirewallD

firewalld是centOS7默认的防火墙,也是工作在网络层,属于包过滤防火墙。firewalld与iptables都是用来管理防火墙的工具,定义防火墙的各种规则,内部结构都指向netfilter内核态实现包过滤防火墙功能。firewalld提供了支持网络区域所定义的网络连接以及接口安全等级的动态防火墙管理工具。

- 阅读剩余部分 -

OnlyOffice社区版部署及前端嵌入使用

使用OnlyOffice社区版docker镜像搭建服务,用于在线编辑word文档等。

官网地址:https://www.onlyoffice.com/zh/download-community.aspx#docs-community

创建相关目录
mkdir -p /app/onlyoffice/DocumentServer/{logs,data,lib,db}

docker执行命令
sudo docker run -i -t -d -p 8090:80 --restart=always -v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data -v /app/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice -v /app/onlyoffice/DocumentServer/db:/var/lib/postgresql -e JWT_ENABLED=false onlyoffice/documentserver

注:使用JWT_ENABLED=false关闭token验证。

- 阅读剩余部分 -

Nginx的热更新方案

Nginx的热更新是通过多条信号命令组合完成,可粗略分为两个步骤:

1、通知老master启动新的master二进制文件。

2、通知老master进程优雅退出。

更新二进制

重命名之前的sbin/nginx文件,将新的nginx文件放到sbin/目录下。

#mv ./sbin/nginx ./sbin/nginx.old
#cp ~/nginx ./sbin/

启动新的nginx

向正在运行的nginx发送USR2信号启动新的nginx,这个时候新老nginx都会接收请求,看哪一个进程能抢到锁,抢到锁的worker进程可以accpet新请求。

#kill -USR2  `cat nginx.pid`

退出旧的nginx

观察新的nginx运行无误后,向旧nginx发信号 停止旧nginx的运行。

#kill -WINCH `cat nginx.pid.oldbin`
#kill -QUIT `cat nginx.pid.oldbin`

KeepAlived+Nginx实践Nginx高可用方案

高可用性 HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。HA 系统是目前企业防止核心计算机系统因故障停机的最有效手段。

实现 HA 的方式,一般采用两台或者多台机器同时完成一项功能,比如数据库服务器,平常只有一台机器对外提供服务,另一台机器作为热备,当这台机器出现故障时,自动动态切换到另一台热备的机器。

Keepalived软件起初是专为LVS(Linux Virtual Server)负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。

Keepalived对高可用服务之间的故障切换转移,是通过 VRRP 来实现的。在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活着,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

Keepalived的作用是检测服务器的状态,当服务器宕机或工作出现故障,Keepalived将检测到并将服务器集群中剔除,选择其他服务器代替该服务器的工作;当服务器恢复工作正常,Keepalived检测到自动将服务器加入服务器集群。

核心原理:使用两台Nginx做反向代理服务器,当其中一台Nginx宕机之后,仍能用另一台来工作,两台Nginx之间用keeplived来监测心跳。

2024-04-02T01:50:31.png

配置要求:两台服务器,三个同网段的IP地址。

- 阅读剩余部分 -

CentOS查看已安装软件包

CentOS查看已安装软件包的方法

1、使用rpm命令
rpm是CentOS系统中的包管理工具,我们可以使用 rpm -qa rpm -q vim来查询已安装的软件包。

2、使用yum命令
yum是CentOS系统中另一个包管理工具,它可以通过网络自动下载并安装软件包。我们可以使用 yum list installed yum list installed vim 来查询已安装的软件包。

3、使用dnf命令
dnf是CentOS 8及以上版本中默认的包管理工具,它是yum的升级版,可以提供更好的性能和更好的用户体验。我们可以使用 dnf list installed dnf list installed vim 来查询已安装的软件包。