分类目录归档:linux学习

自动登录expect脚本实例图文教程-演道网

简介:

1.expect的讲解

2.实例操作自动登录脚本

expect讲解

expect可以让我们实现自动登录远程机器,并且可以实现自动远程执行命令。当然若是使用不带密码的密钥验证同样可以实现自动登录和自动远程执行命令。但当不能使用密钥验证的时候,我们就没有办法了。所以,这时候只要知道对方机器的账号和密码就可以通过expect脚本实现登录和远程命令。

Expect中最关键的四个命令是send,expect,spawn,interact。

send:用于向进程发送字符串
expect:从进程接收字符串
spawn:启动新的进程
interact:允许用户交互

1. send命令

send命令接收一个字符串参数,并将该参数发送到进程。

expect1.1> send “hello worldn”hello world

2. expect命令

expect命令和send命令正好相反,expect通常是用来等待一个进程的反馈。expect可以接收一个字符串参数,也可以接收正则表达式参数。

expect “hin”send “hello there!n”

这两行代码的意思是:从标准输入中等到hi和换行键后,向标准输出输出hello there

3. spawn命令

上文的所有demo都是和标准输入输出进行交互,但是我们跟希望他可以和某一个进程进行交互。spawm命令就是用来启动新的进程的。

set timeout -1spawn ftp ftp.test.com      //打开新的进程,该进程用户连接远程ftp服务器

expect “Name”            //进程返回Name时

send “userr”        //向进程输入

anonymousrexpect “Password:”        //进程返回Password:时

send “123456r”    //向进程输入don@libes.comr

expect “ftp> ”            //进程返回ftp>时

send “binaryr”          //向进程输入binaryr

expect “ftp> ”            //进程返回ftp>时

send “get test.tar.gzr”  //向进程输入get test.tar.gzr

4.interact

到现在为止,我们已经可以结合spawn、expect、send自动化的完成很多任务了。但是,如何让人在适当的时候干预这个过程了。比如下载完ftp文件时,仍然可以停留在ftp命令行状态,以便手动的执行后续命令。interact可以达到这些目的。下面的demo在自动登录ftp后,允许用户交互。

spawn ftp ftp.test.com

expect “Name”

send “userr”

expect “Password:”

send “123456r”

interact

2台主机

服务端:back :192.168.19.134

客户端:other:192.168.19.135

服务端操作

1.使用expect之前,需要先安装expect:

yum install -y expect

安装ssh

yum install openssh-server -y

yum -y install openssh-clients

2.新建一个自动登录脚本文件

格式:

      spawn ssh -l username 192.168.1.1

expect{

      “(yes/no)?” { send “yes”; exp_continue}

      “password:” {send “AAAA”}

        }

 interact

vim login.expect

#! /usr/bin/expect

#about login

#written by lizheng

set host “192.168.19.135”

set passwd “lizheng123”

spawn ssh  root@$host

expect {

    “yes/no” { send “yesr”; exp_continue}

    “password:” { send “$passwdr” }

  }

interact

spacer.gif

3.更改权限

chmod +x login.expect

4.执行脚本语句

./login.expect

输入客户机的密码即可登录

5.退出

logout

转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn

Linux下配置使用sendEmail发送邮件-演道网

有时候我们要将每天的sql慢查询等信息发送到运维人员或者其他相关责任人。Linux下默认的邮件发送方式经常被各种邮件服务器当做垃圾邮件处理了。

因此我们最好还是自己动手改造下。

下载sendEmail-v1.56.tar.gz并解压到/root目录下,重命名为sendEmail

然后编写mail.sh 内容如下:

#!/bin/bash
# Date: 2017/01/01
 
# 发件人账号和密码
user=’linux’
pass=’Abcd@12345678′
 
sendEmail=/root/sendEmail
 
# 第一个参数是收件人,第二个参数是邮件的主题,第三个参数是邮件的正文
$sendEmail -f linux@linuxidc.com -s smtp.linuxidc.com -u “$2” -m “$3” -o message-charset=utf8 -xu $user -xp $pass -t $1 >> /tmp/mail.log

发邮件的方法:

sh mail.sh linuxidc@126.com ‘SQL慢查询’ ‘这是慢查询的正文部分’
或者
cat /tmp/slow.log | sh mail linuxidc@126.com ‘SQL慢查询’

转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn

Linux下不使用useradd创建用户-演道网

Linux下手动创建用户的全过程:需要管理员权限。

1.在/etc/group中添加用户所属组的相关信息。如果用户还有辅助组则在对应组中加入该用户作为成员。

2.在/etc/passwd和/etc/shadow中添加用户相关信息。此时指定的家目录还不存在,密码不存在,所以/etc/shadow的密码位使用“!!”代替。

3.创建家目录。cp -r /etc/skel /home/user_name。

4.修改家目录及子目录的所有者和属组。

chown -R user_name:user_name /home/user_name

5.修改家目录及子目录的权限。例如设置组和其他用户无任何权限但所有者有:chmod -R go= /home/user_name

到此为止,用户已经创建完成了,只是没有密码,所以只能su,不能登录。

6.生成密码。使用openssl passwd -1 -salt ‘12345678’生成使用md5算法的密码,此时要求输入密码,然后将生成的密码复制到/etc/shadow对应用户的密码位。

其中-1是指md5,-salt ‘12345678’是使用8位的字符创建密码的杂项,8位字符任意指定。虽然新版本的passwd文件中的算法是SHA512(6),但也支持md5(1)。

这里也可以使用passwd命令直接修改密码。

7.测试手动创建的用户是否可以正确登录。

以下为步骤:请千万记得备份这些相关文件。

mkdir /tmp/12;cp /etc/group /etc/passwd /etc/shadow /tmp/12/    /*备份这几个文件*/
echo “userX:x:666” >> /etc/group
echo “userX:x:666:666::/home/userX:/bin/bash” >> /etc/passwd
echo ‘userX:!!:17121:0:99999::::’ >> /etc/shadow
cp -r /etc/skel /home/userX
chown -R userX:userX /home/userX
chmod -R go= /home/userX
passwd –stdin userX <<< '123456' 测试使用userX是否可以登录。 如果是使用openssl passwd创建的密码。那么使用下面的方法将这部分密码替换到/etc/shadow中。 field=$(cat /etc/shadow | cut -d":" -f2)
password=$(openssl passwd -1 -salt ‘abcdefg’ 123456)
sed -i ‘$s%’$field’%’$password’%’ /etc/shadow

转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn

Linux下使用adduser与useradd命令批量添加用户-演道网

在Linux下添加用户的命令有 adduser与useradd ,这两个命令有些不同 。下面结合批量添加用户来说明。

一.adduser批量添加用户

      使用adduser时,创建用户的过程更像是一种人机对话,系统会提示你输入各种信息,然后会根据这些信息帮你创建新用户。这样我们没有必要知道那么多的参数,一样可以达到自定义添加用户。

  步骤如下:

  (1)建立用户名列表文件username.txt  

 stu1
 stu2
 stu3
 stu4
 stu5
 stu6

  (2)批量添加的脚本文件  

###在这里也可以设置用户所属的用户组
for a
do
    echo “/home/student/$a”
    adduser –home /home/student/$a $a
done

      (3)执行该脚本文件,查看执行过程

root@linuxidc:/home/linuxidc/Desktop/Dos# sh t.sh `cat < username.txt`
/home/student/stu1
Adding user `stu1′ …
Adding new group `stu1′ (1002) …
Adding new user `stu1′ (1001) with group `stu1′ …
Creating home directory `/home/student/stu1′ …
Copying files from `/etc/skel’ …
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for stu1
Enter the new value, or press ENTER for the default
    Full Name []:
    Room Number []:
    Work Phone []:
    Home Phone []:
    Other []:
Is the information correct? [Y/n]

可见,在执行的过程中,系统交互式的询问,每个用户的设置信息。虽然简化了新建用户的程序,但是在批量添加用户的过程中是不可取的。

二.useradd批量添加用户

   使用useradd时,如果后面不添加任何参数选项,例如:#sudo useradd test创建出来的用户将是默认“三无”用户:一无Home Directory,二无密码,三无系统Shell。

  步骤如下:

  (1)建立用户名列表文件username.txt (同上)

  (2)创建用户密码对应文件serc.txt,格式为username:password (注意文件的格式)   

stu1:tt1
stu2:tt2
stu3:tt3
stu4:tt4
stu5:tt5
stu6:tt6

   (3)批量添加的脚本文件aa.sh

##添加用户,并且在/home/ 下为用户生成用户目录。
cat < username.txt | xargs -n 1 useradd -m
##批处理模式下更新密码
chpasswd < serc.txt
##将上述的密码转换到密码文件和组文件
pwconv
##结束验证信息
echo “OK 新建完成”

(4)执行该脚本文件,查看执行过程

root@linuxidc:/home/linuxidc/Desktop/Dos# sh aa.sh
新建完成

        useradd命令,在执行没有出错的情况下,不会输出任何的信息,不会与用户交互。但是用户必须要记住那些设置项目,否则添加的用户可能出现一些预想不到的结果。

        总结上来讲,在Ubuntu中,adduser更适合初级使用者,因为不用去记那些繁琐的参数选项,只要跟着系统的提示一步一步进行下去就行,缺点就是整 个创建过程比较复杂而漫长;而useradd比较适合有些高阶经验的使用者,往往一行命令加参数就能解决很多问题,所以创建起来十分方便。

转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn

Linux添加用户命令useradd-演道网

简单讲述下Linux添加用户命令useradd的使用方法。

1、用户添加命令useradd
[root@localhost user1]# useradd [选项] 用户名
选项:
-u UID:手工指定用户的UID号
-d 家目录:手工指定用户的家目录
-c 用户说明:手工指定用户的说明
-g 组名:手工指定用户的初始组
-G 组名:指定用户的附加组
-s shell: 手工指定用户的登录shell。默认是/bin/bash

也就是说我们可以自定义新添加用户的每个字段。

2、添加默认用户
比如我们添加下面这样一个用户mag,然后大家看随之都哪些文件被同时添加了。

[root@localhost ~]# useradd mag
然后我们分别用grep命令和ls 命令来查看是不是自动生成了这些用户信息。
但是正常不建议大家手工修改这些信息,就系统默认就行了。

[root@localhost ~]# grep mag /etc/passwd
[root@localhost ~]# grep mag /etc/shadow
[root@localhost ~]# grep mag /etc/group
[root@localhost ~]# grep mag /etc/gshadow
[root@localhost ~]# ll -d /home/lamp
[root@localhost ~]# ll /var/spool/mail/lamp

3、指定选项添加用户
我们来试试手工指定用户信息的方式来添加一个用户。
useradd -u 600 -G root,bin -d /home/lamp1 -c “test user” -s /bin/bash mageo

为什么不用-g而是用-G呢?因为如果用-g把新建的用户指定为root默认用户组的话等于又添加了一个root用户,不符合逻辑,所以我们可以用-G把新建用户的附加组设置为root组,如果想设置多个附加组,中间用逗号隔开,比如上面的root,bin就是同时加入了这两个附加用户组。
大家可以自己去尝试。

4、用户默认值文件
A、/etc/default/useradd,我们来打开这个文件看看里面的内容:
linux用户默认值文件

GROUP=100 用户默认组,和我们前面讲的默认是从500开始不太一样,那是因为Linux分公有模式和私有我们,这个是指公有模式,而我们用的都是私有模式。这个大家做过了解就行了。
HOME=/home 用户家目录
INACTIVE=-1 密码过期宽限天数(shadow文件第7字段)
EXPIRE= 密码失效时间(8)
SHELL=/bin/bash 默认shell
SKEL=/etc/skel 模版目录
CREATE_MAIL_SPOOL=yes 是否建立邮箱

B、那么还有另外一个默认值文件。
/etc/login.defs
如图:

linux用户默认值
PASS_MAX_DAYS 9999 密码有效期(5)
PASS_MIN_DAYS 0 密码修改间隔(4)
PASS_MIN_LEN 5 密码最小5位(PAM)
PASS_WARN_AGE 7 密码到期警告(6)
UID_MIN 500 最小和最大UID范围
GID_MAX 60000
ENCRYPT_METHOD SHA512 加密模式

如果我们想修改新建用户的默认值,那就修改这两个配置文件即可。

转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn

使用光盘iso实现Linux操作系统的自动安装部署-演道网

前边写了一篇使用 PXE 的方式批量安装操作系统,不是任何时候任何地方都有环境来通过 PXE 方式来进行安装。如果此时需要通过光盘安装,默认的情况下是通过交互式方式进行安装,其实也可以通过 kickstart 的方式来实现自动化安装部署。光盘通过 ks.cfg 进行安装的实现方式比较简单,下边简单的进行总结。

搭建PXE服务器安装Linux系统  http://www.linuxidc.com/Linux/2017-02/140481.htm

配置PXE 自动化安装CentOS 6.7  http://www.linuxidc.com/Linux/2016-04/129926.htm

PXE实现批量无人值守安装CentOS7系统  http://www.linuxidc.com/Linux/2017-02/140512.htm

一、实现原理

光盘通过读取 ks.cfg 文件来实现安装操作系统,ks.cfg 配置文件放在光盘的根目录即可,然后修改 isolinux/isolinux.cfg 文件,设置内核参数,指定 ks.cfg 文件的位置即可。由于原始 iso 镜像文件是只读的,不能直接在 iso 光盘目录文件内进行修改,需要拷贝到一个临时目录,修改完后在封装为 iso 镜像文件。

二、拷贝镜像临时目录

mkdir /mnt/cdrom
mount -o loop CentOS-6.8-x86_64-minimal.iso /mnt/cdrom
cp -ar /mnt/cdrom/ /root/iso    # 原来root下没有iso目录,拷贝过来重命名为iso

三、生成 ks.cfg 文件

生成 ks.cfg 文件的方式大概有2种,一是可以通过图形工具 system-config-kickstart 来定制生成指定的 ks.cfg 文件,二是对于熟悉 kickstart 语法的可以直接编写 ks.cfg 配置文件。本次实验用的 ks.cfg 配置比较简单,是通过工具生成的,下边给出本次的 ks.cfg 文件。

#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
# Use CDROM installation media
cdrom
# Root password
rootpw --iscrypted $1$p6oEoqGo$UDHZdzw56Rl6Rt5oi1A0Q1
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use graphical install
graphical
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# Installation logging level
logging --level=info
# Reboot after installation
#reboot
# System timezone
timezone --isUtc Asia/Shanghai
# Network information
network  --bootproto=dhcp --device=eth0 --onboot=on
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel 
# Disk partitioning information
part /boot --asprimary --fstype="ext4" --ondisk=sda --size=200
part swap --asprimary --fstype="swap" --ondisk=sda --size=4096
part / --asprimary --fstype="ext4" --grow --ondisk=sda --size=1

拷贝到光盘镜像根目录:

/bin/cp ks.cfg /root/iso/

四、修改启动项菜单内核参数

修改菜单项配置文件 isolinux/isolinux.cfg:

default vesamenu.c32
#prompt 1
timeout 1    # 超时自动选择菜单时间设置,设置为1时,即一闪而过,设置3秒为好。

修改内核参数,指定 ks.cfg 位置:

label linux
  menu label ^Install CentOS 6.8 x64 System.    # 自定义了菜单
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=cdrom:/ks.cfg     # 添加了ks文件的位置:光盘的根目录

五、封装iso镜像文件

cd /root/iso/    # 进入镜像制作目录

如果没有 mkisofs 命令,执行安装:

yum install mkisofs -y

执行封装镜像的命令:

mkisofs -o /root/CentOS6.8_x64.iso \
    -V centos6 -b isolinux/isolinux.bin \
    -c isolinux/boot.cat \
    -no-emul-boot -boot-load-size 4 \
    -boot-info-table -R -J -T -v .

转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn

源码包制作成rpm包-演道网

将源码包(tar包)制作成rpm 包

一、准备实验环境
实验环境 RHEL6
1.下载源码软件包:lsyncd-2.0.5.tar.gz
2.首先检查本地的编译环境和 rpm 包制作软件与相关目录是否正常
3.rhel6 下的 rpm 包制作源码所在目录/root/rpmbuild,与 rhel5 的/usr/src/RedHat/有所不同
[root@linuxidc ~]# rpmbuild lsyncd-2.0.5.tar.gz //可以生成/root/rpmbuild 目录
如 果 没 有 /root/rpmbuild 目 录 , 执 行 命 令 :rpmbuild lsyncd-2.0.5.tar.gz , 会 自 动 生 成
4.拷贝 lsyncd 源码到/root/rpmbuild/SOURCES 目录下,此时,所有子目录下只有 SOURCES 下有 lsyncd-2.0.5.tar.gz 一个文件
[root@linuxidc rpmbuild]# tree

二、生成 spec 规则文件 (rpm -qpi 查看的内容来源于此文件)
[root@linuxidc rpmbuild]# cd SPECS
[root@linuxidc SPECS]# vim lsyncd-2.0.5.spec
注意一定要用 vim 编辑才会自动生成模板文件。 该文件内容为自动生成的模板,待会根据需要手工修改,暂时保存退出即可。

1.重要部分解释
Source0: //源码名称
BuildRequires: //软件依赖关系描述(可以省略)
Requires: //该 rpm 包所依赖的软件包名称
%build //本段是建立段,所执行的命令为生成软件包服务,相当于./configure 和 make
%install //这一节主要用于完成实际安装软件必须执行的命令,这一节一般是由make install 指令构成,但是有时也会包含 cp、mv、install 等指令
%clean //这一节所描述的内容表示在完成包建立的工作之后,自动执行此节下的脚本进行附加的清除工作,这一节的内容通常简单地使用 rm -rf $RPM_BUILD_ROOT 命令,
不需要指定此节的其它内容
%files //这一节指定构成包的文件的列表,它是使用节前缀%files 表示的。此外,它还包含一系列宏控制安装后的文件属性和配置信息。,分为三类–说明文档(doc),
配置文件(config)及执行程序,也根据提示编写。%files 下列出应该捆绑到 RPM 中的文件,并能够可选地设置许可权和其它信息

2.编辑 lsyncd 的 spec 规则文件 (编辑 lsyncd-2.0.5.spec 文件,先填写可以确定的部分)

Source0: lsyncd-2.0.5.tar.gz //注意名称要写对,文件名字必须与源码一致

%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT //此处没有填写完整,需根据“make install”的输出填写。

%files //此处还没有填写,后面根据提示再修改。

%changelog
//下面填写编译时间 5 月 22 日,日期格式为 date +”%a %b %d %Y”,必须以*开头,以–end结尾
* Tue May 22 2012
–end

如何确定其它的参数内容呢,可以根据一下步骤,一步步填写

3.安装源码包
[root@lsyncd lsyncd-2.0.5]# ./configure //看看配置时需要依赖哪些软件包
//在配置过程中,需要的软件依赖包为 lua-devel-5.1.4-4.1.el6.i686.rpm,那么 lsyncd-2.0.5.spec
中,”BuildRequires: Requires:”软件依赖配置就可以写上 lua-devel。

[root@linuxidc lsyncd-2.0.5]# make
[root@linuxidc lsyncd-2.0.5]# make install
输出的内容就是 lsyncd-2.0.5.spec 文件中“%install”后面需要填写的内容,表示安装哪些文件到哪些路径下,但要修改格式。
1.将这一段内容中所有的/usr/local 修改为变量$RPM_BUILD_ROOT,因为制作 rpm 包时并不需要将文件安装到实际的路径,所以暂时安装在$RPM_BUILD_ROOT 中,其实就是/root/rpmbuild/BUILDROOT/lsyncd-2.0.5-1.el6.i386 这个临时目录。
2.将这一段内容中所有的单引号去掉或者换成双引号,因为要允许变量。

到现在,lsyncd-2.0.5.spec 文件中还有“%files”没有填写。%files 表示编译完成的软件到底包括那些文件,可以执行 rpmbuild -bb lsyncd-2.0.5.spec,根据提示可以得到%files 的内容。
[root@vmware1 SPECS]# rpmbuild -bb lsyncd-2.0.5.spec
在最后会有这一段关于这些文件的错误,这里列出的所有文件,就是我们需要填写入
lsyncd-2.0.5.spec 中%files 的内容。

三、到这里所有 lsyncd-2.0.5.spec 中所有内容编写完毕,再次执行 rpmbuild 命令
[root@linuxidc SPECS]# rpmbuild -ba lsyncd-2.0.5.spec
//顺利通过编译,使用-ba 生成 rpm 包和 srpm 包,查看生成的目标 rpm 包
[root@linuxidc rpmbuild]# tree *RPMS
[root@linuxidc rpmbuild]# rpm -qpi RPMS/i386/lsyncd-2.0.5-1.el6.i386.rpm
[root@linuxidc i386]# rpm -ivh lsyncd-2.0.5-1.el6.i386.rpm
[root@linuxidc i386]# rpm -qa | grep lsyncd
[root@linuxidc i386]# rpm -ql lsyncd
通过 rpm 的查询命令发现 lsyncd 的信息,都是我们之前配置的内容。

转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn

Ubuntu 16.04下安装部署Zabbix3.0-演道网

网上有很多在Ubuntu下安装部署Zabbix的,但是大多数教程都是在Ubuntu 14.04下部署,同时Zabbix也不是3.0版本以上。所以在这里写一篇目前最新的部署教程。

一 配置zabbix软件下载源

# wget http://repo.zabbix.com/zabbix/3.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.0-1+trusty_all.deb

# dpkg -i zabbix-release_3.0-1+trusty_all.deb

# apt-get update

二 安装Server端

需要安装如下组件:

apache2
php5
php5-gd
libapache2-mod-php5
zabbix-server-mysql
php5-mysql
zabbix-frontend-php

在Ubuntu16.04中的apt-get源不能正常下载安装 zabbix-server-mysql和php5等等,所以要更换源问的内容。

1 首先到/etc/apt/目录对原来的source.list进行备份

#cp source.list source.list_16.04

2 然后把Ubuntu 15.10的source.list的内容

deb http://us.archive.ubuntu.com/ubuntu/ wily main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ wily main restricted
deb http://us.archive.ubuntu.com/ubuntu/ wily-updates main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ wily-updates main restricted
deb http://us.archive.ubuntu.com/ubuntu/ wily universe
deb-src http://us.archive.ubuntu.com/ubuntu/ wily universe
deb http://us.archive.ubuntu.com/ubuntu/ wily-updates universe
deb-src http://us.archive.ubuntu.com/ubuntu/ wily-updates universe
deb http://us.archive.ubuntu.com/ubuntu/ wily multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ wily multiverse
deb http://us.archive.ubuntu.com/ubuntu/ wily-updates multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ wily-updates multiverse
deb http://us.archive.ubuntu.com/ubuntu/ wily-backports main restricted universe multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ wily-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu wily-security main restricted
deb-src http://security.ubuntu.com/ubuntu wily-security main restricted
deb http://security.ubuntu.com/ubuntu wily-security universe
deb-src http://security.ubuntu.com/ubuntu wily-security universe
deb http://security.ubuntu.com/ubuntu wily-security multiverse
deb-src http://security.ubuntu.com/ubuntu wily-security multiverse

覆盖原来的source.list的内容

3 清理一下apt缓存信息

#apt-get clean
#apt-get upgrade
#apt-get update

4 如果zabbix-frontend-php无法下载的话可以切换回16.04的source.list进行下载安装

三 配置Server

# vi /etc/zabbix/zabbix_server.conf

DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
StartTrappers=200
CacheSize=512M

四 设置Mysql

#mysql -u root -p

(安装mysql时我把root账号的密码设置为zabbix)

Enter passworld:zabbix
mysql>create database zabbix character set utf8 collate utf8_bin;
mysql>grant all privileges on zabbix.* to zabbix@localhost identified by ‘zabbix’;
mysql>flush privileges;
mysql>set GLOBAL max_connections=1000;
mysql>show variables like ‘%max_connections%’;
mysql> quit;
#cd /usr/share/doc/zabbix-server-mysql
#zcat create.sql.gz | mysql -u root -p zabbix
#cp -r /usr/share/zabbix /var/www/html/zabbix
#service zabbix-server restart

五 服务器容器配置

1 php

#vim /etc/php5/apache2/php.ini修改项:

post_max_size = 16M
max_execution_time = 300
max_input_time = 300
date.timezone = “Asia/Shanghai”
extension_dir = “/usr/lib/php5/20131226/”(gd.so被apt在到/usr/lib/php5/20131226下)
extension=gd.so

修改完成后重启apache2

#service apache2 star

2 按照网页指引配置

用浏览器打开http://10.92.21.160/zabbix,通过网站方式对zabbixserver进行配置初始化检查

直接按照网页端配置执行。

用户名密码:Admin/zabbix

六 安装客户端

#apt-get install zabbix-agent

安装客户端后,若不是服务器本机,修改zabbix配置文件/etc/zabbix/zabbix_agentd.conf的数据

#vi /etc/zabbix/zabbix_agentd.conf

修改ServerAcive的IP,地址为服务端地址

ServerActive=10.92.21.160

设置为0 仅为主动模式,如果需要发送数据等 可以不修改此项

StartAgents=0

Hostname修改为网页里面添加的Hostname,需要保持一致。

Hostname=Zabbix server

七 添加host进行监控

Configuration–>Hosts–>选择默认的Zabbix server,进入详细页面然后full clone,调整一下配置信息

如果出现时间不对应的情况下需要设置下服务器的时区

#dpkg-reconfigure tzdata

选择Asia -> 再选择Shanghai -> OK

#date -s “02 OCT 2016 17:07:00”

一些Zabbix相关教程集合

CentOS 7.2 安装部署 Zabbix 3.0.4 详解  http://www.linuxidc.com/Linux/2016-11/137671.htm

Ubuntu 14.04下Zabbix2.4.5 源码编译安装  http://www.linuxidc.com/Linux/2015-05/117657.htm

安装部署分布式监控系统Zabbix 2.06 http://www.linuxidc.com/Linux/2013-07/86942.htm

Zabbix基本配置及监控主机 http://www.linuxidc.com/Linux/2016-12/138504.htm

CentOS 7.0 x64下Zabbix 3.0 安装笔记  http://www.linuxidc.com/Linux/2016-11/137044.htm

CentOS下Zabbix 3.0.4安装部署 http://www.linuxidc.com/Linux/2017-01/139087.htm

CentOS 6.3下Zabbix监控MySQL数据库参数 http://www.linuxidc.com/Linux/2013-05/84800.htm

64位CentOS 6.2下安装Zabbix 2.0.6   http://www.linuxidc.com/Linux/2014-11/109541.htm

ZABBIX 的详细介绍请点这里
ZABBIX 的下载地址请点这里

转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn

虚拟机RedHat Linux的紧急救援-演道网

由于虚拟机无法启动,vmware vcenter已经无法监控到虚机vmware tools的心跳。登陆VC通过虚拟机控制台查看发现虚机RedHat Linux卡在如下界面:

从截图来看:

显示chmod、chgrp、chown和awk没有找到(有可能误删),由于系统启动时候需要执行rc.sysinit脚本,该脚本会执行些权限控制命令,因此必须要用到这些文件,由于文件无法找到,导致系统初始化失败。

经过沟通,了解到客户安装了apache和mysql,并且修改了/etc/profile文件配置了应用的环境变量,导致出现如上问题。

解决问题:

给这台虚机加载redhat linux的iso,设置虚拟机bios,CD光驱为第一启动顺序,重新启动虚拟机,选择救援模式进行紧急救援。

由于是丢失文件,因此这里需要开启网络功能,方便从其他主机拷贝相关文件。

在这里输入原先该虚机的IP和网关

mount系统到sysimage下

点击OK后,进入修复模式的shell下

然后chroot  /mnt/sysimage

进入/bin后,确实没有发现chmod、chown和awk等这几个命令,我们可以考虑从一台好的redhat linux系统中拷贝这几个文件过来,在命令行下执行

#scp -r root@11.11.165.177:/usr/bin/* /bin/

结果却提示命令没找到,应该是没有客户端软件,导致SCP命令没有被识别。那么设置本地yum源,并安装openssh客户端,

#yum install openssh-clients

再次执行#scp -r root@11.11.165.177:/usr/bin/* /bin/后提示输入密码,输入后开始执行拷贝命令。

拷贝完成后重启系统,顺利初始化并成功进入系统。

•总结

Rescue修复要注意系统初始文件和系统命令文件的关系,恢复系统完整性。

补充另一个测试示例:

修改linux系统的文件grub.conf、fstab  我这里就不删除了,只是更改名称让系统找不到就可以了

引导程序(MBR的512字节中前446字节为引导程序,紧跟着后面64字节为分区表,最后面2个字节为结束标记)

使用以下命令把bootloader( 启 动引导程序MBR中的446字 )覆盖掉

dd if=/dev/zero of=/dev/sda bs=446 count=1

然后进入救援模式

使用fsdisk -l 查看一下分区

在当前的目录创建一个目录,用来挂载根

mkdir a

mount /dev/sda2 /a                    挂载根目录到a下

mount /dev/sda1 /a/boot                  挂载boot目录,因为它为单独分区

挂载成功之后就可以看到所有的系统文件,可以进行修复和修改文件了

恢复被我们修改的文件

接下来是安装MBR中的446字节的引导程序

装grub就是装/boot/grub/stage1,救援模式下输入 #grub 就可以进入grub的命令模式下

1、root(hd0,0)  这里是指的第一块一盘的一个分区,就是要指定/boot所在的分区

2、setup(hd0) 这里是安装grub的意思,当出现successed就是安装成功了

3、quit退到shell模式

4、exit重启

重启后就自动进入了 grub> 的模式,在这里手动引导系统先看一下手动引导系统

root(hd0,0)  指定一下内核文件的位置,还是/boot目录所在的分区

kernel/vmlinuz-2…ro root=/dev/sda2 具体的内核文件并以只读的形式挂载上

initrd/initrd…….      具体的内存启动镜像

boot  加载系统

如下图:

虚拟机RedHat Linux的紧急救援

以上操作完成之后,进入系统,这时候系统的 grub.conf 尚未恢复,需要进入目录恢复此系统文件才算是系统修复完成了。

注意:根分区和/boot最好是独立分区,而把之外的做成是LVM卷,那么在救援模式下会比较方便。

转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn

Struts2+Spring3+Hibernate3+MySQL简单登录实现-演道网

使用Struts2+Spring3+Hibernate3+MySQL实现简单登录,下面就开始说小编写的代码。

1.导入相关的jar包

2.建立数据库

1 create table account(
2 id int(10),
3 user varchar(50),
4 paw varchar(50)
5 );
6 insert into account values(1,'admin','admin'); 

3.建立包结构

 

4.配置文件的配置及代码

4.1 数据库配置文件:db.properties

1 #jdbc
2 jdbc.driver=com.mysql.jdbc.Driver
3 jdbc.url=jdbc:mysql://127.0.0.1:3306/test
4 jdbc.username=root
5 jdbc.password=

4.2 spring配置文件:applicationContext.xml

 1 xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
 4     xmlns:util="http://www.springframework.org/schema/util" xmlns:jee="http://www.springframework.org/schema/jee"
 5     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
 6     xmlns:mvc="http://www.springframework.org/schema/mvc"
 7     xsi:schemaLocation="
 8         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
 9         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
10         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd
11         http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
12         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
13         http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
14         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
15     <context:component-scan base-package="ssh.ft">context:component-scan>
16 
17     <context:property-placeholder location="classpath:configs/db.properties" />
18     
19     <bean id="dataSource"
20         class="org.springframework.jdbc.datasource.DriverManagerDataSource">
21         <property name="driverClassName" value="${jdbc.driver}" />
22         <property name="url" value="${jdbc.url}" />
23         <property name="username" value="${jdbc.username}" />
24         <property name="password" value="${jdbc.password}" />
25     bean>
26     
27     <bean id="sessionFactory"
28         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
29         
30         <property name="hibernateProperties">
31             <props>
32                 <prop key="connection.useUnicode">trueprop>
33                 <prop key="connection.characterEncoding">utf-8prop>
34                 <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialectprop>
35                 <prop key="hibernate.show_sql">trueprop>
36                 <prop key="hibernate.hbm2ddl.auto">updateprop>
37             props>
38         property>
39         <property name="dataSource" ref="dataSource" />
40         <property name="mappingResources">
41             <list>
42                 
43                 <value>configs/account.hbm.xmlvalue>
44             list>
45         property>
46     bean>
47     
48     
51 
52     
53     
57 
58     
59     <bean class="ssh.ft.dao.impl.AccountDaoImpl" id="accountDao">
60         <property name="sessionFactory" ref="sessionFactory">property>
61     bean>
62 
63     
64     <bean class="ssh.ft.service.impl.AccountManagerImpl" id="accountManager">
65         <property name="dao" ref="accountDao">property>
66     bean>
67 
68     
69     
70     <bean class="ssh.ft.action.LoginAction" id="loginAction" scope="prototype">
71         <property name="accountManager" ref="accountManager">property>
72     bean>
73 beans>

注:上述配置中注释掉的事物部分,因为小编未使用到,所以也没有认证,在配置时可去掉

4.4 配置完spring,可以先测试下配置是否正确

 1 package ssh.ft.test;
 2 
 3 import java.util.List;
 4 
 5 import org.hibernate.SessionFactory;
 6 import org.junit.Test;
 7 import org.springframework.context.ApplicationContext;
 8 import org.springframework.context.support.ClassPathXmlApplicationContext;
 9 
10 import ssh.ft.entity.Account;
11 
12 public class DBTest {
13     @Test
14     public void test1() {
15         String config = "configs/applicationContext.xml";
16         ApplicationContext ac = new ClassPathXmlApplicationContext(config);
17         SessionFactory sf = ac.getBean(SessionFactory.class);
18         String sql = "from Account";
19         @SuppressWarnings("unchecked")
20         List list = sf.openSession().createQuery(sql).list();
21         System.out.println(list.size());
22     }
23 }

若配置正确则有如下结果:红色框中的数字1表示数据库中表account中有一条数据,若未出现正确结果,则需要检查上述代码哪里出错,或者是jar的问题

因为小编也遇到过很多jar包不全之类的问题,务必正确之后再往下编写,否则到后面错误或更多导致无法查找

4.5 struts配置文件:struts.xml

 1 xml version="1.0" encoding="UTF-8" ?>
 2 DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6     
 7     <constant name="struts.devMode" value="true" />
 8     
 9     <constant name="struts.objectFactory" value="spring" />
10 
11     
12     <package name="s2sh" extends="s2sh1">
13         
14         <action name="login" class="loginAction" method="login">
15             <result name="success">/WEB-INF/index.jspresult>
16             <result name="error">/WEB-INF/login.jspresult>
17         action>
18     package>
19     <package name="s2sh1" extends="struts-default">
20         <action name="tologin" >
21             <result >/WEB-INF/login.jspresult>
22         action>
23     package>
24 struts> 

4.6 hibernate配置文件:hibernate.cfg.xml 

 1 DOCTYPE hibernate-configuration PUBLIC
 2     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 3     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 4 <hibernate-configuration>
 5     <session-factory>
 6 
 7         
 8         <property name="dialect"> org.hibernate.dialect.MySQLDialectproperty>
 9         
10         <property name="show_sql">trueproperty>
11         <property name="format_sql">trueproperty>
12         
13         <property name="hibernate.current_session_context_class">threadproperty>
14         
15         <property name="hbm2ddl.auto">createproperty> 
16         
17         <mapping resource="configs/account.hbm.xml" />
18     session-factory>
19 hibernate-configuration> 

hibernate配置文件还有一个实体映射文件:account.hbm.xml

 1 DOCTYPE hibernate-mapping PUBLIC 
 2     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 4 <hibernate-mapping>
 5     <class name="ssh.ft.entity.Account" table="account">
 6         
 7         <id name="id">
 8             
 9             <generator class="native">generator>
10         id>
11         
12         <property name="user">property>
13         <property name="paw">property>
14     class>
15 hibernate-mapping> 

在hibernate.cfg.xml中的

  

这个语句里面的account.hbm.xml就是指上述的account.hbm.xml配置文件

4.7 web.xml配置文件

 1 xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
 3   <display-name>sshdisplay-name>
 4     
 5     <listener>
 6         <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
 7     listener>
 8     <context-param>
 9         <param-name>contextConfigLocationparam-name>
10         <param-value>classpath:configs/applicationContext.xmlparam-value>
11     context-param>
12   <filter>
13         <filter-name>struts2filter-name>  
14         <filter-class>  
15           org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter  
16         filter-class>
17         
23     filter>  
24     <filter-mapping>  
25         <filter-name>struts2filter-name>  
26         <url-pattern>/*url-pattern>  
27     filter-mapping>
28 web-app> 

注:上述小编注释了一个未解决的问题,就是struts.xml文件一定要在src目录下方,否则会报错,如果想放在其他地方的话,若有人解决希望一定要留言告诉小编

4.8 实体类:Account.java

 1 package ssh.ft.entity;
 2 
 3 public class Account {
 4     private Integer id;
 5     private String user;
 6     private String paw;
 7 
 8     public Integer getId() {
 9         return id;
10     }
11 
12     public void setId(Integer id) {
13         this.id = id;
14     }
15 
16     public String getUser() {
17         return user;
18     }
19 
20     public void setUser(String user) {
21         this.user = user;
22     }
23 
24     public String getPaw() {
25         return paw;
26     }
27 
28     public void setPaw(String paw) {
29         this.paw = paw;
30     }
31 
32

4.9 dao和daoImpl:AccountDao.java

1 package ssh.ft.dao;
2 
3 import ssh.ft.entity.Account;
4 
5 public interface AccountDao {
6     public Account findByUser(String user);
7

AccountDaoImpl.java

 1 package ssh.ft.dao.impl;
 2 
 3 import java.util.List;
 4 
 5 import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
 6 
 7 import ssh.ft.dao.AccountDao;
 8 import ssh.ft.entity.Account;
 9 
10 public class AccountDaoImpl extends HibernateDaoSupport implements AccountDao {
11 
12     @Override
13     public Account findByUser(String user) {
14         @SuppressWarnings("unchecked")
15         List list = this.getHibernateTemplate().find("from Account a where a.user=?", user);
16         if (list == null || list.isEmpty()) {
17             return null;
18         }
19         return list.get(0);
20     }
21

 4.10 service和serviceImpl:AccountManager.java

1 package ssh.ft.service;
2 
3 public interface AccountManager {
4     public boolean login(String user, String paw);
5 }

AccountManagerImpl.java

 1 package ssh.ft.service.impl;
 2 
 3 import ssh.ft.dao.AccountDao;
 4 import ssh.ft.entity.Account;
 5 import ssh.ft.service.AccountManager;
 6 
 7 public class AccountManagerImpl implements AccountManager {
 8     private AccountDao dao;
 9 
10     public AccountDao getDao() {
11         return dao;
12     }
13 
14     public void setDao(AccountDao dao) {
15         this.dao = dao;
16     }
17 
18     @Override
19     public boolean login(String user, String paw) {
20         Account account = dao.findByUser(user);
21         if (account == null) {
22             return false;
23         }
24         if (account.getPaw().equals(paw)) {
25             return true;
26         }
27         return false;
28     }
29 
30

4.11 account处理类:LoginAction.java

 1 package ssh.ft.action;
 2 
 3 import com.opensymphony.xwork2.ActionSupport;
 4 
 5 import ssh.ft.entity.Account;
 6 import ssh.ft.service.AccountManager;
 7 
 8 public class LoginAction extends ActionSupport {
 9     private static final long serialVersionUID = 1L;
10 
11     private Account account;
12 
13     public Account getAccount() {
14         return account;
15     }
16 
17     public void setAccount(Account account) {
18         this.account = account;
19     }
20 
21     private AccountManager accountManager;
22 
23     public AccountManager getAccountManager() {
24         return accountManager;
25     }
26 
27     public void setAccountManager(AccountManager accountManager) {
28         this.accountManager = accountManager;
29     }
30 
31     private String msg;
32 
33     public String getMsg() {
34         return msg;
35     }
36 
37     public void setMsg(String msg) {
38         this.msg = msg;
39     }
40 
41     public String login() {
42         System.out.println("login........");44         if (accountManager.login(account.getUser(), account.getPaw())) {
45             return SUCCESS;
46         }
47         setMsg("用户或密码错误");
48         return ERROR;
49     }
50

5.页面部分

5.1 页面结构

 

 5.2 登录页面:login.jsp

 1 <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
 2 <%@ taglib uri="/struts-tags" prefix="s"%>
 3 
 4 
 5 
 6 
 7 Login
 8 
 9 
10     
11         
12         
13         
14     
15     
16 
17  

5.3 登录成功页面:index.jsp

 1 <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
 2 <%@ taglib uri="/struts-tags" prefix="s"%>
 3 
 4 
 5 
 6 
 7 Login
 8 
 9 
10     欢迎【】登陆!
11 
12  

6.测试,在浏览器输入:http://localhost:8080/ssh/tologin

成功页面:

整合到此结束。

Eclipse搭建SSH(Struts2+Spring+Hibernate)框架教程  http://www.linuxidc.com/Linux/2016-11/137193.htm

推荐阅读:

Struts中异步传送XML和JSON类型的数据 http://www.linuxidc.com/Linux/2013-08/88247.htm

Struts2的入门实例 http://www.linuxidc.com/Linux/2013-05/84618.htm

Struts2学习笔记-Value Stack(值栈)和OGNL表达式  http://www.linuxidc.com/Linux/2015-07/120529.htm 

struts2文件上传(保存为BLOB格式) http://www.linuxidc.com/Linux/2014-06/102905.htm

Struts2的入门实例 http://www.linuxidc.com/Linux/2013-05/84618.htm

Struts2实现ModelDriven接口 http://www.linuxidc.com/Linux/2014-04/99466.htm

遇到的Struts2文件下载乱码问题 http://www.linuxidc.com/Linux/2014-03/98990.htm

Struts2整合Spring方法及原理 http://www.linuxidc.com/Linux/2013-12/93692.htm

Struts2 注解模式的几个知识点 http://www.linuxidc.com/Linux/2013-06/85830.htm

Struts 的详细介绍请点这里
Struts 的下载地址请点这里

转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn