AnQiCMS 凭借其高效、灵活的架构,为企业内容管理提供了强大的支持。尤其在处理多站点需求时,AnQiCMS 提供了多种部署方案,其中之一便是通过在同一台服务器上运行多个独立的 AnQiCMS 实例来管理不同的网站。当采用这种部署模式时,如何巧妙地利用 crontab 计划任务来确保这些不同实例的稳定启动和持续运行,就成为了网站运营者需要深入理解的关键环节。
本文将围绕这一主题,详细阐述 AnQiCMS 多实例部署下 crontab 的管理策略,旨在帮助您构建一个健壮、高可用的多站点环境。
理解 AnQiCMS 的多站点部署模式
在 AnQiCMS 中,多站点部署通常有两种主要方式。一种是单 AnQiCMS 实例管理多个网站:您可以在一个 AnQiCMS 后台配置多个域名,并通过反向代理将不同的域名指向同一个 AnQiCMS 服务端口(例如 8001),系统内部根据域名解析到不同的网站内容。在这种模式下,您只有一个 AnQiCMS 进程在运行,因此 crontab 只需要关注这一个进程的启动和维护。
然而,我们今天重点探讨的是另一种更具隔离性的部署方式:在一台服务器上运行多个独立的 AnQiCMS 实例。这意味着每个 AnQiCMS 实例都是一个独立的 Go 语言可执行文件及其配套的数据和配置,它们各自监听不同的端口,并分别管理一个或多个网站。这种模式提供了更高的隔离性和独立性,但同时也带来了多进程管理的需求,尤其是在服务器重启或进程意外终止后,如何确保每个实例都能自动拉起,便是 crontab 发挥作用的地方。
单个 AnQiCMS 实例的 crontab 启动机制
AnQiCMS 提供了一个简洁高效的 start.sh 脚本来管理单个实例的启动。这个脚本的核心逻辑是检查 AnQiCMS 进程是否已经在运行,如果未运行,则启动它。这通常是通过检查进程列表中的特定可执行文件名来实现的。
一个典型的 start.sh 脚本内容可能如下所示:
#!/bin/bash
### check and start AnqiCMS
# author fesion
# the bin name is anqicms
BINNAME=anqicms
BINPATH=/www/wwwroot/anqicms_site1 # 假设这是实例1的路径
# check the pid if exists
exists=`ps -ef | grep '\<anqicms\>' |grep -v grep |wc -l`
echo "$(date +'%Y%m%d %H:%M:%S') $BINNAME PID check: $exists" >> $BINPATH/check.log
echo "PID $BINNAME check: $exists"
if [ $exists -eq 0 ]; then
echo "$BINNAME NOT running"
cd $BINPATH && nohup $BINPATH/$BINNAME >> $BINPATH/running.log 2>&1 &
fi
为了让这个脚本在系统后台自动运行并定期检查 AnQiCMS 进程,我们会将其配置到 crontab 中。例如,设置每分钟执行一次,以确保进程的稳定:
# 编辑 crontab
crontab -e
# 在打开的编辑器中添加一行,指向您的 start.sh 脚本路径
*/1 * * * * /www/wwwroot/anqicms_site1/start.sh
这里 /www/wwwroot/anqicms_site1 便是您的第一个 AnQiCMS 实例的部署目录。
扩展到多个 AnQiCMS 实例的管理
当您需要在同一台服务器上运行多个独立的 AnQiCMS 实例时,管理策略的核心原则是为每个实例提供一套独立的、可区分的启动和监控机制。AnQiCMS 的设计允许您通过复制其程序代码来实现这一点。
复制实例代码与配置 首先,您需要为每个独立的 AnQiCMS 实例创建一份完整的代码副本。例如,如果您有
anqicms_site1实例,现在需要添加anqicms_site2,那么您应该在服务器上创建类似/www/wwwroot/anqicms_site2的目录,并将 AnQiCMS 的所有文件(包括可执行文件、config.json等)复制到该新目录中。配置独立端口 每个 AnQiCMS 实例都必须监听一个唯一的端口。在每个实例的根目录下,找到
config.json文件,并修改其中的port字段为不同的值。例如,anqicms_site1使用8001,anqicms_site2则修改为8002,anqicms_site3使用8003,依此类推。重命名可执行文件(推荐做法) 为了方便
crontab脚本和系统监控能够清晰地区分不同的 AnQiCMS 进程,强烈建议您重命名每个实例目录下的 AnQiCMS 可执行文件。例如,将/www/wwwroot/anqicms_site1/anqicms重命名为anqicms_site1_bin,将/www/wwwroot/anqicms_site2/anqicms重命名为anqicms_site2_bin。这样做的好处是,当您执行ps -ef | grep anqicms命令时,可以清楚地看到每个实例的进程信息,并且避免grep误匹配其他相关进程。为每个实例创建独立的
start.sh脚本 根据重命名后的可执行文件和各自的安装路径,为每个 AnQiCMS 实例创建定制化的start.sh脚本。这些脚本的逻辑与单个实例的脚本类似,但BINNAME和BINPATH变量会指向各自实例的唯一信息。例如,
anqicms_site2的start.sh脚本