neutron创建network执行的那些命令

当搭建完openstack之后,在创建instance之前,第一件事情就是创建network,一个经典的流程如下:

TENANT_NAME="openstack"
TENANT_NETWORK_NAME="openstack-net"
TENANT_SUBNET_NAME="${TENANT_NETWORK_NAME}-subnet"
TENANT_ROUTER_NAME="openstack-router"
FIXED_RANGE="NEUTRON_FIXED_RANGE"
NETWORK_GATEWAY="NEUTRON_NETWORK_GATEWAY"

PUBLIC_GATEWAY="NEUTRON_PUBLIC_GATEWAY"
PUBLIC_RANGE="NEUTRON_PUBLIC_RANGE"
PUBLIC_START="NEUTRON_PUBLIC_START"
PUBLIC_END="NEUTRON_PUBLIC_END"

(1) 创建private network和subnet

TENANT_ID=$(keystone tenant-list | grep " $TENANT_NAME " | awk ‘{print $2}‘)

TENANT_NET_ID=$(neutron net-create --tenant_id $TENANT_ID $TENANT_NETWORK_NAME --provider:network_type gre --provider:segmentation_id 1 | grep " id " | awk ‘{print $4}‘)

TENANT_SUBNET_ID=$(neutron subnet-create --tenant_id $TENANT_ID --ip_version 4 --name $TENANT_SUBNET_NAME $TENANT_NET_ID $FIXED_RANGE --gateway $NETWORK_GATEWAY --dns_nameservers list=true 8.8.8.8 | grep " id " | awk ‘{print $4}‘)

当仅有private network的时候,会对这个private network创建一个DHCP Server

所以DHCP Agent会执行下面的命令:

ip netns exec qdhcp-66b9930b-2871-414c-8c6f-991a6a8cffe0 ip -o link show tap452bdfab-31

这个命令试图从dhcp的namespace里面查找dhcp的网卡,但是很可惜找不到,返回error

Cannot open network namespace "qdhcp-66b9930b-2871-414c-8c6f-991a6a8cffe0": No such file or directory

于是试图创建dhcp server的网卡,这个网卡会attach到br-int上,所以先查看br-int

ip -o link show br-int

如果br-int没有问题,于是创建dhcp server的网卡,并且attach到br-int上

ovs-vsctl -- --if-exists del-port tap452bdfab-31 -- add-port br-int tap452bdfab-31 -- set Interface tap452bdfab-31 type=internal -- set Interface tap452bdfab-31 external-ids:iface-id=452bdfab-3152-44d0-bd9c-40c94a6f8640 -- set Interface tap452bdfab-31 external-ids:iface-status=active -- set Interface tap452bdfab-31 external-ids:attached-mac=fa:16:3e:d7:08:67

为网卡设置mac

ip link set tap452bdfab-31 address fa:16:3e:d7:08:67

查看当前存在的namespace

ip -o netns list

返回

qrouter-26a45e0e-a58a-443b-a972-d62c0c5a1323

qdhcp-760d2c5e-4938-49b0-bffe-c77c5b141d18

发现没有这个dhcp所对应的namespace,需要创建一个

ip netns add qdhcp-66b9930b-2871-414c-8c6f-991a6a8cffe0

将io网卡设置为up

ip netns exec qdhcp-66b9930b-2871-414c-8c6f-991a6a8cffe0 ip link set lo up

将新建的dhcp server的网卡放在这个namespace里面

ip link set tap452bdfab-31 netns qdhcp-66b9930b-2871-414c-8c6f-991a6a8cffe0

将DHCP server的网卡设置为up

ip netns exec qdhcp-66b9930b-2871-414c-8c6f-991a6a8cffe0 ip link set tap452bdfab-31 up

查看这个网卡的ip地址

ip netns exec qdhcp-66b9930b-2871-414c-8c6f-991a6a8cffe0 ip addr show tap452bdfab-31 permanent scope global

为这个网卡配置ip地址

ip netns exec qdhcp-66b9930b-2871-414c-8c6f-991a6a8cffe0 ip -4 addr add 192.168.10.3/24 brd 192.168.10.255 scope global dev tap452bdfab-31

ip netns exec qdhcp-66b9930b-2871-414c-8c6f-991a6a8cffe0 ip -4 addr add 169.254.169.254/16 brd 169.254.255.255 scope global dev tap452bdfab-31

第一个地址是dhcp server的地址,第二个地址是metadata server的地址

查看路由表

ip netns exec qdhcp-66b9930b-2871-414c-8c6f-991a6a8cffe0 ip route list dev tap452bdfab-31

169.254.0.0/16  proto kernel  scope link  src 169.254.169.254

192.168.10.0/24  proto kernel  scope link  src 192.168.10.3

添加路由表

ip netns exec qdhcp-66b9930b-2871-414c-8c6f-991a6a8cffe0 ip route replace default via 192.168.10.1 dev tap452bdfab-31

查看网卡的配置

ip netns exec qdhcp-66b9930b-2871-414c-8c6f-991a6a8cffe0 ip addr show tap452bdfab-31

232: tap452bdfab-31: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default

link/ether fa:16:3e:d7:08:67 brd ff:ff:ff:ff:ff:ff

inet 192.168.10.3/24 brd 192.168.10.255 scope global tap452bdfab-31

valid_lft forever preferred_lft forever

inet 169.254.169.254/16 brd 169.254.255.255 scope global tap452bdfab-31

valid_lft forever preferred_lft forever

inet6 fe80::f816:3eff:fed7:867/64 scope link tentative

valid_lft forever preferred_lft forever

启动dhcp server

ip netns exec qdhcp-66b9930b-2871-414c-8c6f-991a6a8cffe0 env NEUTRON_NETWORK_ID=66b9930b-2871-414c-8c6f-991a6a8cffe0 dnsmasq --no-hosts --no-resolv --strict-order --bind-interfaces --interface=tap452bdfab-31 --except-interface=lo --pid-file=/var/lib/neutron/dhcp/66b9930b-2871-414c-8c6f-991a6a8cffe0/pid --dhcp-hostsfile=/var/lib/neutron/dhcp/66b9930b-2871-414c-8c6f-991a6a8cffe0/host --addn-hosts=/var/lib/neutron/dhcp/66b9930b-2871-414c-8c6f-991a6a8cffe0/addn_hosts --dhcp-optsfile=/var/lib/neutron/dhcp/66b9930b-2871-414c-8c6f-991a6a8cffe0/opts --leasefile-ro --dhcp-range=set:tag0,192.168.10.0,static,86400s --dhcp-lease-max=256 --conf-file= --domain=openstacklocal

启动metadata proxy

ip netns exec qdhcp-66b9930b-2871-414c-8c6f-991a6a8cffe0 neutron-ns-metadata-proxy --pid_file=/var/lib/neutron/external/pids/66b9930b-2871-414c-8c6f-991a6a8cffe0.pid --metadata_proxy_socket=/var/lib/neutron/metadata_proxy --network_id=66b9930b-2871-414c-8c6f-991a6a8cffe0 --state_path=/var/lib/neutron --metadata_port=80 --debug --verbose --log-file=neutron-ns-metadata-proxy-66b9930b-2871-414c-8c6f-991a6a8cffe0.log --log-dir=/var/log/neutron

最后查看一下网卡配置

ip netns exec qdhcp-66b9930b-2871-414c-8c6f-991a6a8cffe0 ip addr show tap452bdfab-31

kill -HUP 17666

这个PID是什么呢?

# ps aux | grep 17666
nobody   17666  0.0  0.0  28204  1112 ?        S    Jul14   0:00 dnsmasq --no-hosts --no-resolv --strict-order --bind-interfaces --interface=tap452bdfab-31 --except-interface=lo --pid-file=/var/lib/neutron/dhcp/66b9930b-2871-414c-8c6f-991a6a8cffe0/pid --dhcp-hostsfile=/var/lib/neutron/dhcp/66b9930b-2871-414c-8c6f-991a6a8cffe0/host --addn-hosts=/var/lib/neutron/dhcp/66b9930b-2871-414c-8c6f-991a6a8cffe0/addn_hosts --dhcp-optsfile=/var/lib/neutron/dhcp/66b9930b-2871-414c-8c6f-991a6a8cffe0/opts --leasefile-ro --dhcp-range=set:tag0,192.168.10.0,static,86400s --dhcp-lease-max=256 --conf-file= --domain=openstacklocal

原来是我们的dhcp server

这个命令的作用是:如果想要更改配置而不需停止并重新启动服务,请使用该命令。在对配置文件作必要的更改后,发出该命令以动态更新服务配置。

最后查看一下路由配置

ip netns exec qdhcp-66b9930b-2871-414c-8c6f-991a6a8cffe0 ip route list dev tap452bdfab-31

(2) 创建一个router,并且和private network相连

ROUTER_ID=$(neutron router-create --tenant_id $TENANT_ID $TENANT_ROUTER_NAME | grep " id " | awk ‘{print $4}‘)

neutron router-interface-add $ROUTER_ID $TENANT_SUBNET_ID

查看br-ex

ip -o link show br-ex

59: br-ex: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default

link/ether a0:48:1c:ab:df:b5 brd ff:ff:ff:ff:ff:ff

查看所有的namespace

ip -o netns list

qdhcp-66b9930b-2871-414c-8c6f-991a6a8cffe0

qrouter-26a45e0e-a58a-443b-a972-d62c0c5a1323

qdhcp-760d2c5e-4938-49b0-bffe-c77c5b141d18

发现没有这个router的namespace,创建一个

ip netns add qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82

将io网卡设为up

ip netns exec qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82 ip link set lo up

这是一个router,所以enable ip forward

ip netns exec qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82 sysctl -w net.ipv4.ip_forward=1

初始化iptables

ip netns exec qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82 iptables-save –c

# Generated by iptables-save v1.4.21 on Thu Jul 17 01:37:57 2014

*nat

:PREROUTING ACCEPT [0:0]

:INPUT ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

:POSTROUTING ACCEPT [0:0]

COMMIT

# Completed on Thu Jul 17 01:37:57 2014

# Generated by iptables-save v1.4.21 on Thu Jul 17 01:37:57 2014

*mangle

:PREROUTING ACCEPT [0:0]

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

:POSTROUTING ACCEPT [0:0]

COMMIT

# Completed on Thu Jul 17 01:37:57 2014

# Generated by iptables-save v1.4.21 on Thu Jul 17 01:37:57 2014

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

COMMIT

# Completed on Thu Jul 17 01:37:57 2014

ip netns exec qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82 iptables-restore –c

启动metadata proxy

ip netns exec qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82 neutron-ns-metadata-proxy --pid_file=/var/lib/neutron/external/pids/d62d417d-2005-46d7-a83b-b1e5c0a36d82.pid --metadata_proxy_socket=/var/lib/neutron/metadata_proxy --router_id=d62d417d-2005-46d7-a83b-b1e5c0a36d82 --state_path=/var/lib/neutron --metadata_port=9697 --debug --verbose --log-file=neutron-ns-metadata-proxy-d62d417d-2005-46d7-a83b-b1e5c0a36d82.log --log-dir=/var/log/neutron

查看router的网卡

ip netns exec qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82 ip -o link show qr-29003a09-e7

但是网卡不存在

Device "qr-29003a09-e7" does not exist.

查看br-int,router的网卡会attach到这个网卡上

ip -o link show br-int

58: br-int: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default

link/ether 0a:9b:c6:54:ef:46 brd ff:ff:ff:ff:ff:ff

创建router的网卡,并且attach到br-int

ovs-vsctl -- --if-exists del-port qr-29003a09-e7 -- add-port br-int qr-29003a09-e7 -- set Interface qr-29003a09-e7 type=internal -
- set Interface qr-29003a09-e7 external-ids:iface-id=29003a09-e787-49dd-b5f4-11ad107159c7 -- set Interface qr-29003a09-e7 external-ids:iface-status=active -- set Interface qr-29003a09-e7 external-ids:attached-mac=fa:16:3e:84:6e:cc

设置router网卡的mac

ip link set qr-29003a09-e7 address fa:16:3e:84:6e:cc

查看所有的namespace

ip -o netns list

qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82

qdhcp-66b9930b-2871-414c-8c6f-991a6a8cffe0

qrouter-26a45e0e-a58a-443b-a972-d62c0c5a1323

qdhcp-760d2c5e-4938-49b0-bffe-c77c5b141d18

有这个router的namespace

将这个网卡放在这个namespace里面

ip link set qr-29003a09-e7 netns qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82

将router的网卡设为up

ip netns exec qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82 ip link set qr-29003a09-e7 up

查看网卡的地址

ip netns exec qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82 ip addr show qr-29003a09-e7 permanent scope global

设置网卡的地址

ip netns exec qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82 ip -4 addr add 192.168.10.1/24 brd 192.168.10.255 scope global dev qr-2
9003a09-e7

查看所有的网卡

ip netns exec qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82 ip -o -d link list

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 promiscuity 0

241: qr-29003a09-e7: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default

link/ether fa:16:3e:84:6e:cc brd ff:ff:ff:ff:ff:ff promiscuity 1

(3) 创建外网,并且连接到router

neutron net-create public --router:external=True

neutron subnet-create --ip_version 4 --gateway $PUBLIC_GATEWAY public $PUBLIC_RANGE --allocation-pool start=$PUBLIC_START,end=$PUBLIC_END --disable-dhcp --name public-subnet

neutron router-gateway-set ${TENANT_ROUTER_NAME} public

查看br-ex

ip -o link show br-ex

59: br-ex: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default

link/ether a0:48:1c:ab:df:b5 brd ff:ff:ff:ff:ff:ff

列出所有的网卡

ip netns exec qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82 ip -o -d link list

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 promiscuity 0

241: qr-29003a09-e7: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default

link/ether fa:16:3e:84:6e:cc brd ff:ff:ff:ff:ff:ff promiscuity 1

查看qg网卡

ip netns exec qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82 ip -o link show qg-556ca938-e1

但是网卡不存在

Device "qg-556ca938-e1" does not exist.

查看br-ex

ip -o link show br-ex

创建新的网卡qg,attach到br-ex

ovs-vsctl -- --if-exists del-port qg-556ca938-e1 -- add-port br-ex qg-556ca938-e1 -- set Interface qg-556ca938-e1 type=internal -- set Interface qg-556ca938-e1 external-ids:iface-id=556ca938-e11b-4246-bdc1-ef25c91b7593 -- set Interface qg-556ca938-e1 external-ids:iface-status=active -- set Interface qg-556ca938-e1 external-ids:attached-mac=fa:16:3e:68:12:c0

设置网卡mac

ip link set qg-556ca938-e1 address fa:16:3e:68:12:c0

查看所有的namespace

ip -o netns list

qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82

qdhcp-66b9930b-2871-414c-8c6f-991a6a8cffe0

qrouter-26a45e0e-a58a-443b-a972-d62c0c5a1323

qdhcp-760d2c5e-4938-49b0-bffe-c77c5b141d18

将qg网卡设置到namespace中

ip link set qg-556ca938-e1 netns qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82

将网卡设置为up

ip netns exec qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82 ip link set qg-556ca938-e1 up

查看网卡地址

ip netns exec qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82 ip addr show qg-556ca938-e1 permanent scope global

设置网卡地址

ip netns exec qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82 ip -4 addr add 16.158.165.105/22 brd 16.158.167.255 scope global dev qg
-556ca938-e1

添加router表

ip netns exec qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82 route add default gw 16.158.164.1

设置iptables

ip netns exec qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82 iptables-save –c

# Generated by iptables-save v1.4.21 on Thu Jul 17 01:58:30 2014

*nat

:PREROUTING ACCEPT [4:425]

:INPUT ACCEPT [1:229]

:OUTPUT ACCEPT [0:0]

:POSTROUTING ACCEPT [0:0]

:neutron-l3-agent-OUTPUT - [0:0]

:neutron-l3-agent-POSTROUTING - [0:0]

:neutron-l3-agent-PREROUTING - [0:0]

:neutron-l3-agent-float-snat - [0:0]

:neutron-l3-agent-snat - [0:0]

:neutron-postrouting-bottom - [0:0]

[4:425] -A PREROUTING -j neutron-l3-agent-PREROUTING

[0:0] -A OUTPUT -j neutron-l3-agent-OUTPUT

[0:0] -A POSTROUTING -j neutron-l3-agent-POSTROUTING

[0:0] -A POSTROUTING -j neutron-postrouting-bottom

[0:0] -A neutron-l3-agent-PREROUTING -d 169.254.169.254/32 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 9697

[0:0] -A neutron-l3-agent-snat -jneutron-l3-agent-float-snat

[0:0] -A neutron-postrouting-bottom -j neutron-l3-agent-snat

COMMIT

# Completed on Thu Jul 17 01:58:30 2014

# Generated by iptables-save v1.4.21 on Thu Jul 17 01:58:30 2014

*mangle

:PREROUTING ACCEPT [4:425]

:INPUT ACCEPT [1:229]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

:POSTROUTING ACCEPT [0:0]

COMMIT

# Completed on Thu Jul 17 01:58:30 2014

# Generated by iptables-save v1.4.21 on Thu Jul 17 01:58:30 2014

*filter

:INPUT ACCEPT [1:229]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

:neutron-filter-top - [0:0]

:neutron-l3-agent-FORWARD - [0:0]

:neutron-l3-agent-INPUT - [0:0]

:neutron-l3-agent-OUTPUT - [0:0]

:neutron-l3-agent-local - [0:0]

[1:229] -A INPUT -j neutron-l3-agent-INPUT

[0:0] -A FORWARD -j neutron-filter-top

[0:0] -A FORWARD -j neutron-l3-agent-FORWARD

[0:0] -A OUTPUT -j neutron-filter-top

[0:0] -A OUTPUT -j neutron-l3-agent-OUTPUT

[0:0] -A neutron-filter-top -j neutron-l3-agent-local

[0:0] -A neutron-l3-agent-INPUT -d 127.0.0.1/32 -p tcp -m tcp --dport 9697 -j ACCEPT

COMMIT

# Completed on Thu Jul 17 01:58:30 2014

ip netns exec qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82 iptables-restore –c

显示网卡信息

ip netns exec qrouter-d62d417d-2005-46d7-a83b-b1e5c0a36d82 ip addr show qg-556ca938-e1

242: qg-556ca938-e1: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default

link/ether fa:16:3e:68:12:c0 brd ff:ff:ff:ff:ff:ff

inet 16.158.165.105/22 brd 16.158.167.255 scope global qg-556ca938-e1

valid_lft forever preferred_lft forever

inet6 fe80::f816:3eff:fe68:12c0/64 scope link tentative

valid_lft forever preferred_lft forever

neutron创建network执行的那些命令

时间: 2024-10-09 19:46:43

neutron创建network执行的那些命令的相关文章

neutron ml2 network创建流程源码解析

Neutron的整体架构分为三层. Server —> plugin —>agent 启动server之后neutron会将请求路径和对应的处理函数进行映射. 具体的处理函数由plugin来提供,plugin做的事情有两个: 1)在数据库中创建资源 2)发送rpc请求到具体的agent 所有的plugin提供统一的接口,包括核心资源的增删改查. neutron原生提供ml2这一plugin,ml2plugin分为类型驱动和机制驱动. 下面从创建network的角度来看一下neutron的整个调

万能脚本助Web执行底层Linux命令

需求分析: 这里先要说明的是,这一篇不是QT系列的文章,而是关于Web的,之所以要写这篇,是因为以前做Web相关开发的时候,经常涉及到与linux底层命令打交道,比如说创建一个目录,删除一个目录,或者是执行一个自定义的脚本.关于PHP如何调用.执行Linux的底层命令,以前也研究过,基本上实现了自己需要的功能,但是有些地方一直没有弄明白.今天又偶然碰到了,趁着这个机会向大家描述一下一步一步应该如何实现,并最后附上相关C代码. 原理实现: 首先,一般搭建的Web站点都是采用Apache或Nginx

(八)Eclipse创建Maven项目运行mvn命令

1.Eclipse创建Maven项目 使用Eclipse创建一个Maven项目非常的简单,选择菜单项File>New>Other(也可以在项目结构空白处右击鼠标键),在弹出的对话框中选择Maven下的Maven Project,如图: 然后点击Next按钮,Next按钮,选择一个Archetype指定我们要创建的项目类型.我们选择普通的Java项目"maven-archetype-quickstart",如图: 再点击Next按钮,输入Group Id.Artifact I

Neutron Vlan Network 原理- 每天5分钟玩转 OpenStack(92)

前面我们陆续学习了 Neutron local network,flat network 和 DHCP 服务,从本节将开始讨论 vlan network. vlan network 是带 tag 的网络,是实际应用最广泛的网络类型.下图是 vlan100 网络的示例. 1. 三个 instance 通过 TAP 设备连接到名为 “brqXXXX” linux bridge. 2. 在物理网卡 eth1 上创建了 eth1.100 的 vlan interface,eth1.100 连接到 brq

linux进程编程:子进程创建及执行函数简介

子进程创建及执行函数有三个: (1)fork();(2)exec();(3)system();    下面分别做详细介绍.(1)fork()    函数定义:    pid_t fork();    函数说明:    linux下进程在内存中由三部分数据组成:代码段.数据段.堆栈段.在一个进程中,调用fork函数,可以创建.启动一个新进程.新进程与父进程共享代码段,复制父进程的数据段和堆栈段.创建成功后,fork()会向两个进程都有返回值.向父进程的返回值为子进程的进行号,向子进程的返回值为0.

【大话QT之十一】题外篇:万能脚本助Web执行底层Linux命令

需求分析: 这里先要说明的是,这一篇不是QT系列的文章,而是关于Web的,之所以要写这篇,是因为以前做Web相关开发的时候,经常涉及到与linux底层命令打交道,比如说创建一个目录,删除一个目录,或者是执行一个自定义的脚本.关于PHP如何调用.执行Linux的底层命令,以前也研究过,基本上实现了自己需要的功能,但是有些地方一直没有弄明白.今天又偶然碰到了,趁着这个机会向大家描述一下一步一步应该如何实现,并最后附上相关C代码. 原理实现: 首先,一般搭建的Web站点都是采用Apache或Nginx

m2eclipse简单使用,创建Maven项目 ,运行mvn命令(转)

前面介绍了如何安装m2eclipse,现在,我们使用m2ecilpse导入Hello World项目. 选择菜单项File,然后选择Import,我们会看到一个Import对话框,在该对话框中选择General目录下的Maven Projects,然后点击Next,就会出现Import Projects对话框, 在该对话框中点击Browse…选择Hello World的根目录(即包含pom.xml文件的那个目录),这时对话框中的Projects:部分就会显示该目录包含的Maven项目. 点击Fi

创建可执行的JAR包并运行

将一个应用程序制作成可执行的JAR包,通过JAR包来发布应用程序.创建可执行JAR包的关键在于:让java -jar命令知道JAR包中哪个类是主类,java -jar命令可以通过运行该主类来运行程序.注意:当创建JAR包时,所有的类(即class文件)都必须放在与包结构对应的目录结构中 1.选择想要想要打包的目录 想要打包class文件目录day和程序需要调用的文件目录planeday11是Client类的包名,里面存放着Client.class 2.进入预打包目录所在路径(注意:是要打包目录的

Linux 定时执行shell脚本命令之crontab

crontab可以在指定的时间执行一个shell脚本以及执行一系列Linux命令 例如:服务器管理员定时备份数据库数据.日志等 详解: 常用命令: crontab –e //修改 crontab 文件,如果文件不存在会自动创建. crontab –l //显示 crontab 文件. crontab -r //删除 crontab 文件. crontab -ir //删除 crontab 文件前提醒用户. service crond status //查看crontab服务状态 service