龙空技术网

linux基础20课09,时间有关服务 晓桂科技

Poetry聆听 176

前言:

目前我们对“oracledayofweek”大体比较关心,姐妹们都需要分析一些“oracledayofweek”的相关内容。那么小编同时在网摘上网罗了一些对于“oracledayofweek””的相关资讯,希望小伙伴们能喜欢,朋友们快快来学习一下吧!

一.时间有关服务

atd crond anacrond(此服务rhel6没有,整合到了crond里)

1. atd 服务,一次性时间定时服务(只能定时在某一个分钟的0秒,不能定时某一秒;如果你想精确定时在某时某分某秒,可以使用shell脚本来做)

# /etc/init.d/atd restart

# chkconfig atd on

# at 14:18 072414 --定时的时间 后面是14年7月24号

at> echo "haha" > /dev/pts/1

at> <EOT> --ctrl+d结束

job 1 at 2014-07-24 14:18 --job 1表示一个编号,我这里是系统的第一次at任务所以为1.后面是定时的时间

如果你要做的事步骤比较多,则先写成脚本,然后调用

at -f xxx.sh

# vim /tmp/1.sh

#!/bin/bash

echo 1 > /dev/pts/1

echo 2 > /dev/pts/1

echo 3 > /dev/pts/1

# at now + 1 minutes -f /tmp/1.sh

job 2 at 2014-07-24 14:26

# at now + 1 hours -f /tmp/1.sh

job 3 at 2014-07-24 15:25

# at now + 1 days -f /tmp/1.sh

job 4 at 2014-07-25 14:25

# at now + 1 months -f /tmp/1.sh

job 5 at 2014-08-24 14:25

# at now + 1 years -f /tmp/1.sh

job 6 at 2015-07-24 14:25

其他at命令支持的格式:

# at 6.45 am May 12

# at 11.10 pm

# at 9am tomorrow

# at 15:00 May 24

at

-l 列出at任务 等于atq

-d 删除at任务 等于atrm

-c 查看任务内容

# at -l

3 2014-07-24 15:25 a root

4 2014-07-25 14:25 a root

6 2015-07-24 14:25 a root

# ls /var/spool/at/ --这个目录会看到有三个可执行文件, cat去看与at -c 任务号看到的结果一样

a0000301659c9d a000040165a201 a00006016da181 spool

/etc/at.allow --此文件默认不存在,但可以手动创建,白名单

/etc/at.deny --拒绝,黑名单

--这两个文件控制哪些普通用户可以使用at服务

batch --当负载值低于0.8时,则执行你的任务;但是不太靠谱,建议有此类需求,还是自己写shell来做

executes commands when system load levels permit;

in other words, when the load average drops below

0.8, or the value specified in the invocation of

atd.

# batch

at> echo hehe > /dev/pts/1

at> <EOT>

job 10 at 2014-07-24 14:42

2. crond

周期性执行时间任务

/etc/init.d/crond start --启动服务

chkconfig crond on --开机启动服务

配置文件:

# vim /etc/crontab --下面四行是rhel5里的配置,rhel6里看不到了,但还是在生效

01 * * * * root run-parts /etc/cron.hourly/

02 04 * * * root run-parts /etc/cron.daily/

22 04 * * 7 root run-parts /etc/cron.weekly/

42 04 1 * * root run-parts /etc/cron.monthly/

执行周期 执行用户 特殊命令 执行的对象

分 时 日 月 周

# .---------------- minute (0 - 59)

# | .------------- hour (0 - 23)

# | | .---------- day of month (1 - 31)

# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...

# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

*代表每分,每小时,每天。。。。。。

,代表分隔的时间,如1,3,7

-代表连续的时间,如2-10

*/2代表每2分,每2小时........

run-parts 后面接的是目录,表示执行目录里所有的脚本,脚本要有执行权限

* * * * * --每分钟执行

3-7 2,4,8 * * * --每天的2点,4点,8点的3到7分执行

05 */3 * * * --每三小时的05分执行

05 3-5 5-10 1-4 7 --这里主要是5-10号和星期天这两个条件的关系为或关系(or),而不是和关系(and)。也就是说两个条件只需要满足其一就执行。

例1:

vim /etc/crontab

* * * * * root echo heihei > /dev/pts/5

例2:

* * * * * root sh /path/1.sh --如果执行的事情比较复杂,先写在脚本里,这样去执行

例3:

# vim /etc/crontab

* * * * * root run-parts /etc/cron.minutely

# mkdir /etc/cron.minutely

# vim /etc/cron.minutely/1.sh

#!/bin/bash

echo haha > /dev/pts/5

# vim /etc/cron.minutely/2.sh

#!/bin/bash

echo hehe > /dev/pts/5

# chmod 755 /etc/cron.minutely/*

例4:

crontab命令的一般形式为:

crontab [-u user] -e -l -r

-u 用户名。

-e 编辑crontab文件。

-l 列出crontab文件中的内容。

-r 删除crontab文件。

(1)创建一个新的crontab文件

# touch /tmp/cronfile

# echo "* * * * * echo 1 > /dev/pts/2" >> /tmp/cronfile

# crontab /tmp/cronfile

(2)列出crontab文件

# crontab -l

(3)编辑crontab文件

# crontab -e --每个用户都可以这样创建自己的时间任务

01 21 * * * /sbin/init 0 --因为用什么用户操作就是什么用户的身份,所以这里不用写用户身份

# crontab -u user1 -e --编辑user1用户的时间任务

你不使用crontab -e,直接去修改下面的目录里的对应的用户名的文件也是一样

/var/spool/cron/

(4)删除crontab文件

# crontab -r

(5)允许和拒绝

/etc/cron.allow

/etc/cron.deny --这两个文件的作用参考at.allow和at.deny就可以了

最后,记住一个小常识:如果你要执行多个时间任务,尽量分散到不同的时间点,不让它们重合,会造成一个负载的峰值。

3. anacrond 此服务rhel6没有,整合到了crond里,就是表示crond服务启来了,那么这个服务也起来了

当crond里的执行服务因为关机等原因造成没有执行,anacrond就帮你补上执行。

# vim /etc/anacrontab

# the maximal random delay added to the base delay of the jobs

RANDOM_DELAY=45

# the jobs will be started during the following hours only

START_HOURS_RANGE=3-22

#period in days delay in minutes job-identifier command

1 5 cron.daily nice run-parts /etc/cron.daily

7 25 cron.weekly nice run-parts /etc/cron.weekly

@monthly 45 cron.monthly nice run-parts /etc/cron.monthly

下面这句话意思为:发现1天内/etc/cron.daily里的脚本有没有执行过的crond服务,就会延迟5分钟加一个随机分钟数(可以看日志/var/log/cron来确定)帮你做,然后把时间记录到/var/spool/anacron/cron.daily文件里

1 5 cron.daily nice run-parts /etc/cron.daily

一般来说,此服务不用修改,知道原理就可以了。

如果我现在用crontab写了晚上23点关机,但是我在18点就手动关了,第二天9点来开机,它会不会延迟一段时间把我又关了呢?

如果你是用crontab -e写的关机,则不会

如果你把关机写了一个脚本放到/etc/cron.daily里面,则是可以的

测试步骤:

1,把关机写了一个脚本放到/etc/cron.daily里面,然后给执行权限

2,你可以尝试到延迟的时间改短点,也把随机的RANDOM_DELAY的参数范围改小

3,直接把系统时间改到2天后,这样就可以模拟你的关机任务1天以上的时间没有做

4,可以把crond服务重启一下,查看日志并等待结果

二. nfs network file system

它是一种集群式文件系统,类似于gfs2(global file system ),ocfs(oracle cluster file system)等。它不同单机文件系统(如fat32,ntfs,ext2,ext3,ext4等)

如果同一个存储被挂载到多个机器上,格式化成文件系统需要用集群式文件系统

nfs现在一般来说就是只做linux to linux间的文件共享

/etc/init.d/rpcbind start --在nfs共享时候负责通知客户端,服务器的nfs端口号的

/etc/init.d/nfs start

chkconfig rpcbind on

chkconfig nfs on

# showmount -e 10.0.0.2 --客户端查看服务端的共享,使用此命令

Export list for 10.0.0.2:

/yum *

# /etc/init.d/rpcbind stop --服务器关闭此服务

# showmount -e 10.0.0.2 --客户端就会报下面的错误

clnt_create: RPC: Port mapper failure - Unable to receive: errno 111 (Connection refused)

RPC remote produre call 远程程序调用,使用的端口为111

# /etc/init.d/rpcbind start

# showmount -e 10.0.0.2 --启动rpcbind后,客户端还是不能访问

clnt_create: RPC: Program not registered

# /etc/init.d/nfs restart --重启此服务后,就OK了

# showmount -e 10.0.0.2

Export list for 10.0.0.2:

/yum *

配置nfs

# vim /etc/exports

/test *(ro)

/test 10.0.0.0/24(ro)

/test 10.0.0.11(ro) 10.0.0.12(rw)

--更多写法,man exports去查看

# /etc/init.d/nfs restart

# showmount -e 10.0.0.2

# mount 10.0.0.2:/test /mnt --客户端要访问nfs,就是远程挂载过来

# iptables -F --需要把防火墙规则给清除;这样做是临时清除

# chkconfig iptables off

# setup --使用此命令图形配置,把firewall前的*去掉,确认保存

问题1

客户端挂载后,挂载的目录权限还是原来的权限吗?

不是,它的权限是nfs服务端的挂载目录的权限

问题2

客户端访问挂载的目录,它是以什么样的身份去访问,这个身份用户是客户端的还是服务端的?

nfs客户端默认是以nfsnobody的身份去访问,这个身份是服务端的,哪怕你客户端使用root用户,访问时还是用的nfsnobody的身份

问题3

我把nfs服务端的ro参数换成rw,客户端挂载后能写吗?

还是不能写,因为服务配置rw只表示服务允许写,但系统权限还是不允许

解决方法:

1,在nfs服务端chmod o+w /test,给一个写权限,客户端重新挂载,再写,也可以看到写的文件的owner和group为nfsnobody

2,改客户端访问的身份

# vim /etc/exports

/test *(rw,no_root_squash) --加一个no_root_squash表示让客户端以root的身份来访问服务端

# vim /etc/exports

/test *(rw,anonuid=501,anongid=501) --指定客户端以501这个uid和gid的身份来访问我

三. autofs

自动挂载 (这个与U盘的自动挂载没有关系)

U盘的自动挂载与haldaemon和messagebus和图形界面有关

比如对于nfs的远程挂载,下面命令经常要做,什么方法可以简化此操作

mount 10.0.0.2:/share/soft /share

1,/etc/fstab

2,/etc/rc.local

3,做别名

4.autofs

--上面四种方式,前两种不建议用,因为nfs的挂载有个问题,你做了开机自动挂载我的nfs共享,如果我关机了,而你没有去umount我的挂载,那么你的挂载目录会卡死(造成df -h等命令都用不了),这里建议用第四种

# vim /etc/auto.master

/misc /etc/auto.misc

# vim /etc/auto.misc

cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom

--上面的意思表示/dev/cdrom(光驱)会以iso9660,ro,nosuid,nodev参数自动挂载到/misc/cd目录

--测试,用虚拟机来测试

# /etc/init.d/autofs restart

在虚拟机光驱里填上iso的路径

然后

ls /misc --为空

ls /misc/cd --看到就是iso的内容,表示自动挂载了

ls /misc --过五分钟左右,你不使用它,这个cd目录会消失

挂载samba的配置:

backup -fstype=cifs,username=smbuser1%asdf ://192.168.1.99/pub

挂载iso的配置:

iso -loop,fstype=iso9660,ro :/root/rhel-server-6.0-x86_64-boot.iso

挂载nfs的配置:

nfs -fstype=nfs 192.168.1.99:/test_nfs

实验:

把10.0.0.2:/share/soft /share/soft做成自动挂载,方便自己以后的操作

比如我做下面的命令,你们也可以直接复制这条命令就可以成功了

# tar xf /share/xxx/xxxxxx.tar.gz -C /usr/src/

步骤:

1,mkdir /share

2,vim /etc/auto.master

/share /etc/auto.share

3.vim /etc/auto.share --手动建立此文件

soft - 10.0.0.2:/share/soft --这里挂载参数没有特殊需求就不用指定了,默认就行

iso - 10.0.0.2:/share/iso

4,/etc/init.d/autofs restart --服务可以不用重启,但最好重启一下

总结:此服务的用处范围较小,还可以用于nis或ldap这种用户集中化管理。用户集中化就是可以类似windows域一样,把所有的服务器的用户和密码信息只存放于其中一台server上,其它服务器要登录使用用户名和密码需要去这台server上验证,也就是说其它服务器的/etc/passwd里并没有用户信息。

那么这样就会产生一个问题,其它服务器没有用户信息,你却可以使用server上的用户,但其它服务器上并没有用户家目录,所以你可以用autofs把server上的用户家目录自动挂载到其它服务器对应的家目录路径。

四.dhcp服务

dhcp = dynamic host configuration protocol 动态主机配置协议

可以动态分配IP,网关,DNS指向,主机名(需要DNS支持,也只能简单分配,不能做主机名绑定,所以实际生产环境也不建议这么做,以后可以使用象puppet这种软件来实现)

哪些方式可以指定客户端使用dhcp来获取IP?

方法一:

/etc/sysconfig/network-scripts/ifcfg-eth0这个配置里指定IP获取方式为dhcp,然后/etc/init.d/network restart重启网络就可以

方法二:

# dhclient eth0 --使用这个命令指定eth0网卡用dhcp获取IP(但这个命令只能用一次,用第二次需要kill掉上一次的进程)

dhcp原理

客户端在局域网广播发dhcp discover广播包

收到广播包的dhcp服务端回dhcp offer包

客户端收到offer包后,再发dhcp request广播包

服务端回dhcp ack包

实验,使用宿主机模拟dhcp服务器,虚拟机模拟客户端,但是不要用bridge网络;建议使用hostonly网络(防止同一个网络内多个dhcp冲突)

第一步:

虚拟机(dhcp客户端)指定网卡连接vmnet1网络(并可以通过vmware-netcfg命令,把vmware自带的dhcp关闭);

然后配置网卡通过dhcp获取IP;使用/etc/init.d/network restart或者 dhclient eth0命令来动态获取IP;

结果是获取不成功(因为vmware自带的dhcp关闭,自己要配置的dhcp服务器还没有开始配置)

第二步:

在宿主机(dhcp服务器端)先确认vmnet1网卡的地址和网段(我这里是192.168.62.1)

# yum install dhcp* -y

# vim /etc/dhcp/dhcpd.conf

然后配置下面一段,并启动服务

# rm -f /etc/dhcp/dhcpd.conf

# vim /etc/dhcp/dhcpd.conf

subnet 1.1.1.0 netmask 255.255.255.0 {

range 1.1.1.10 1.1.1.20;

option domain-name-servers 8.8.8.8;

option routers 1.1.1.1;

option broadcast-address 1.1.1.255;

default-lease-time 600;

max-lease-time 7200;

log-facility local7;

}

subnet 2.2.2.0 netmask 255.255.255.0 { --网段和掩码

range 2.2.2.100 2.2.2.200; --地址池

option domain-name-servers 114.114.114.114; --dns

option routers 2.2.2.1; --网关或路由

option broadcast-address 2.2.2.255; --广播地址

default-lease-time 600; --默认组约

max-lease-time 7200; --最大组约

log-facility local7; --日志级别

}

# /etc/init.d/dhcpd restart

第三步:

再次回到虚拟机(dhcp客户端)使用/etc/init.d/network restart或者 dhclient eth0命令来动态获取IP;

这次就可以成功了

第四步:

验证

1,客户端上ifconfig 查看IP是否获取的是服务器指定的范围

2,客户端cat /etc/resolv.conf和route -n查看是否成功获取DNS指向和网关

3,客户端cat /var/lib/dhclient/dhclient-eth0.leases或者cat /var/log/messages |grep dhcp查看相关信息

4,服务端cat /var/lib/dhcpd/dhcpd.leases查看分配情况

在配置里加上下面一段,指定客户端MAC地址为00:0c:29:f4:4c:de的会获取IP为192.168.62.77

host vmware { --这个名字随意,有主机名就写主机名

hardware ethernet 00:0c:29:df:da:d4;

fixed-address 2.2.2.188;

}

然后服务端/etc/init.d/dhcpd restart重启服务,客户端重新获取验证

标签: #oracledayofweek