简体   繁体   English

为什么 bash 脚本,必须创建并运行 zabbix 服务器,执行没有错误,但结果是错误的?

[英]Why bash script, that must creat and run zabbix server, execute without errors, but result is wrong?

everyone.每个人。 I ve started to learn bash and DevOps, lost 2 days, but I can t understand the following: requirmentsve started to learn bash and DevOps, lost 2 days, but I can理解以下内容:要求

  • Centos 7 Centos 7
  • DB mysql DB mysql
  • zabbix server version 4 zabbix服务器版本4
  • mariadb mariadb

I need to write bash script (script at the end of the question), that creates and runs zabbix server (exactly 4 version).我需要编写 bash 脚本(问题末尾的脚本),它创建并运行 zabbix 服务器(正好是 4 版本)。 When I run the script manually step by step (inserting each command in pwsh by hand) in two ways for db creating (example1 or example2) - it is executed properly: zabbix db is created, all services started, zabbix frontend is working well.当我以两种方式逐步手动运行脚本(手动在 pwsh 中插入每个命令)以创建数据库(示例 1 或示例 2)时 - 它正确执行:创建 zabbix db,启动所有服务,zabbix 前端运行良好。 But when I run the script as root user or as local user by command:但是当我以 root 用户身份或通过命令以本地用户身份运行脚本时:

>sh -c /home/zabbix_server

script is finished by:脚本完成:

>Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-server.service to /usr/lib/systemd/system/zabbix-server.service.
>Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.
>Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

there are no error messages during or at the end of the script, but when I try manually execute the command create db (example1 or example2), it's doesn't matter:在脚本期间或脚本结束时没有错误消息,但是当我尝试手动执行命令 create db(example1 或 example2)时,没关系:

#Create DB (example1)
mysql -uroot <<EOF
create database zabbix character set utf8 collate utf8_bin;
create user 'zabbix'@'localhost' identified by 'zabbix';
grant all privileges on zabbix.* to 'zabbix'@'localhost';
EOF
#Create DB (example2)
mysql -u root -e "CREATE DATABASE zabbix; CREATE USER zabbix@localhost identified by 'zabbix'; GRANT ALL ON zabbix.* to zabbix@localhost WITH GRANT OPTION;"

I get the error message: ... db can't be created, zabbix base exist But the result of the command:我收到错误消息: ... db can't be created, zabbix base exists 但是命令的结果:

>show databases;

doesn't show db zabbix in db list.在 db 列表中不显示 db zabbix。

script脚本

#!/usr/bin/env bash
setenforce 0
#Install the repository configuration package
rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
yum clean all
#Install Zabbix server, frontend, agent, database
yum install zabbix-server-mysql -y
yum install zabbix-web-mysql -y
yum install zabbix-agent -y
yum install mariadb-server -y
#Start DB
systemctl start mariadb
#Create DB (example1)
mysql -uroot <<EOF
create database zabbix character set utf8 collate utf8_bin;
create user 'zabbix'@'localhost' identified by 'zabbix';
grant all privileges on zabbix.* to 'zabbix'@'localhost';
EOF
#Create DB (example2)
mysql -u root -e "CREATE DATABASE zabbix; CREATE USER zabbix@localhost identified by 'zabbix'; GRANT ALL ON zabbix.* to zabbix@localhost WITH GRANT OPTION;"
#Import initial schema and data
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql zabbix
#Configure the database for Zabbix server
echo DBPassword=zabbix >> /etc/zabbix/zabbix_server.conf
#Start zabbix server
systemctl start zabbix-server
#Configure frontend
sed -i 's:# php_value date.timezone.*:php_value date.timezone Europe\/Minsk:g' /etc/httpd/conf.d/zabbix.conf;
#Start httpd
systemctl restart zabbix-server zabbix-agent httpd
#Make Zabbix server and agent processes start at system boot
systemctl enable zabbix-server zabbix-agent httpd

Depending on what you want to achieve, this may be a good suggestion:根据您想要实现的目标,这可能是一个很好的建议:

CREATE DATABASE IF NOT EXISTS zabbix;

This makes the call idempotent!这使得调用是幂等的!

The problem was, that the script contains a \r (CR) at the end (0d).问题是,该脚本在末尾 (0d) 包含一个 \r (CR)。 Remove it with:删除它:

tr -d '\r' < old_name_script > new_name_script

And the script works fine.并且脚本运行良好。 If it will be useful, there is fully working example of the script, that creates zabbix server:如果它有用,有一个完整的脚本示例,它创建了 zabbix 服务器:

#!/usr/bin/env bash
#Disable SELinux
enforceStatus=getenforse
if [ "$enforceStatus" != "Permissive" ]; then
setenforce 0
fi
#Install the repository configuration package
rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm
yum clean all
#Install Zabbix server, frontend, agent, database, httpd
yum install zabbix-server-mysql -y
yum install zabbix-web-mysql -y
yum install zabbix-agent -y
yum install mariadb mariadb-server -y
yum install httpd -y
#Start and add to autostart DB mariadb
systemctl start mariadb
systemctl enable mariadb.service
#Create DB (example1)
mysql -uroot <<EOF
create database zabbix character set utf8 collate utf8_bin;
create user 'zabbix'@'localhost' identified by 'zabbix';
grant all privileges on zabbix.* to 'zabbix'@'localhost';
EOF
#Import initial schema and data
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql zabbix
#Configure the database for Zabbix server
echo DBPassword=zabbix >> /etc/zabbix/zabbix_server.conf
#Configure frontend 
sed -i 's:# php_value date.timezone.*:php_value date.timezone Europe\/Minsk:g' /etc/httpd/conf.d/zabbix.conf;
#Start zabbix server processes start at system boot
systemctl restart zabbix-server
systemctl enable zabbix-server
#Start httpd processes start at system boot
systemctl restart httpd
systemctl enable httpd
#Start zabbix-agent processes start at system boot
systemctl restart zabbix-agent
systemctl enable zabbix-agent
#Add permissions to irewall
firewall-cmd --permanent --add-port=10050/tcp
firewall-cmd --permanent --add-port=10051/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM