kafka_systemctl.sh

[root@dev-kafka02 shell]# cat creat_canal_systemctl.sh #!/bin/bash # 自动部署 Canal 的 systemd 服务并配置自启动 # 定义服务名称及路径 SERVICE_NAME="canal.service" SERVICE_

[root@dev-kafka02 shell]# cat creat_canal_systemctl.sh 
#!/bin/bash
# 自动部署 Canal 的 systemd 服务并配置自启动

# 定义服务名称及路径
SERVICE_NAME="canal.service"
SERVICE_PATH="/etc/systemd/system/$SERVICE_NAME"

# 检测 root 权限
if [ "$(id -u)" != "0" ]; then
    echo "错误:此脚本必须使用 root 权限运行!"
    exit 1
fi

# 步骤 1: 创建 systemd 服务文件
echo "创建 systemd 服务文件: $SERVICE_PATH"
cat <<EOF > "$SERVICE_PATH"
[Unit]
Description=Canal Database Change Log Capture (Instance: local)
After=network.target

[Service]
Type=forking
User=root
Group=root
Environment="JAVA_HOME=/usr/local/jdk1.8.0_192"
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/jdk1.8.0_192/bin
PIDFile=/opt/canal/canal-1.1.5/bin/canal.pid 
WorkingDirectory=/opt/canal/canal-1.1.5
ExecStart=/opt/canal/canal-1.1.5/bin/startup.sh local
ExecStop=/opt/canal/canal-1.1.5/bin/stop.sh
#ExecRestart=/opt/canal/canal-1.1.5/bin/restart.sh 
Restart=on-failure
RestartSec=10

# 安全限制
#PrivateTmp=true
#ProtectHome=read-only
NoNewPrivileges=true

# 日志配置
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=canal

[Install]
WantedBy=multi-user.target
EOF

# 步骤 2: 设置文件权限
chmod 644 "$SERVICE_PATH"
echo "服务文件权限已设置."

# 步骤 3: 确保启动脚本可执行
CANAL_BIN="/opt/canal/canal-1.1.5/bin"
if [ -f "$CANAL_BIN/startup.sh" ] && [ -f "$CANAL_BIN/stop.sh" ]; then
    chmod +x "$CANAL_BIN/startup.sh" "$CANAL_BIN/stop.sh"
    echo "启动/停止脚本权限已更新."
else
    echo "错误:找不到 Canal 的启动/停止脚本!"
    exit 1
fi

# 步骤 4: 重载 systemd 配置
systemctl daemon-reload
echo "systemd 配置已重载."

# 步骤 5: 启用并启动服务
systemctl enable $SERVICE_NAME
systemctl start $SERVICE_NAME
echo "服务已启用并启动."

# 步骤 6: 验证服务状态
echo "服务状态检查:"
systemctl status $SERVICE_NAME --no-pager

LICENSED UNDER CC BY-NC-SA 4.0
Comment