百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

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

sinye56 2024-10-03 00:35 8 浏览 0 评论

一.时间有关服务

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重启服务,客户端重新获取验证

相关推荐

程序员:JDK的安装与配置(完整版)_jdk的安装方法

对于Java程序员来说,jdk是必不陌生的一个词。但怎么安装配置jdk,对新手来说确实头疼的一件事情。我这里以jdk10为例,详细的说明讲解了jdk的安装和配置,如果有不明白的小伙伴可以评论区留言哦下...

Linux中安装jdk并配置环境变量_linux jdk安装教程及环境变量配置

一、通过连接工具登录到Linux(我这里使用的Centos7.6版本)服务器连接工具有很多我就不一一介绍了今天使用比较常用的XShell工具登录成功如下:二、上传jdk安装包到Linux服务器jdk...

麒麟系统安装JAVA JDK教程_麒麟系统配置jdk

检查检查系统是否自带java在麒麟系统桌面空白处,右键“在终端打开”,打开shell对话框输入:java–version查看是否自带java及版本如图所示,系统自带OpenJDK,要先卸载自带JDK...

学习笔记-Linux JDK - 安装&amp;配置

前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统#进入安装文件目...

Linux新手入门系列:Linux下jdk安装配置

本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...

测试员必备:Linux下安装JDK 1.8你必须知道的那些事

1.简介在Oracle收购Sun后,Java的一系列产品就被整合到Oracle官网中,打开官网乍眼一看也不知道去哪里下载,还得一个一个的摸索尝试,而且网上大多数都是一些Oracle收购Sun前,或者就...

Linux 下安装JDK17_linux 安装jdk1.8 yum

一、安装环境操作系统:JDK版本:17二、安装步骤第一步:下载安装包下载Linux环境下的jdk1.8,请去官网(https://www.oracle.com/java/technologies/do...

在Ubuntu系统中安装JDK 17并配置环境变量教程

在Ubuntu系统上安装JDK17并配置环境变量是Java开发环境搭建的重要步骤。JDK17是Oracle提供的长期支持版本,广泛用于开发Java应用程序。以下是详细的步骤,帮助你在Ubuntu系...

如何在 Linux 上安装 Java_linux安装java的步骤

在桌面上拥抱Java应用程序,然后在所有桌面上运行它们。--SethKenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...

Windows和Linux环境下的JDK安装教程

JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...

linux安装jdk_linux安装jdk软连接

JDK是啥就不用多介绍了哈,外行的人也不会进来看我的博文。依然记得读大学那会,第一次实验课就是在机房安装jdk,编写HelloWorld程序。时光飞逝啊,一下过了十多年了,挣了不少钱,买了跑车,娶了富...

linux安装jdk,全局配置,不同用户不同jdk

jdk1.8安装包链接:https://pan.baidu.com/s/14qBrh6ZpLK04QS8ogCepwg提取码:09zs上传文件解压tar-zxvfjdk-8u152-linux-...

运维大神教你在linux下安装jdk8_linux安装jdk1.7

1.到官网下载适合自己机器的版本。楼主下载的是jdk-8u66-linux-i586.tar.gzhttp://www.oracle.com/technetwork/java/javase/downl...

window和linux安装JDK1.8_linux 安装jdk1.8.tar

Windows安装JDK1.8的步骤:步骤1:下载JDK打开浏览器,找到JDK下载页面https://d.injdk.cn/download/oraclejdk/8在页面中找到并点击“下载...

最全的linux下安装JavaJDK的教程(图文详解)不会安装你来打我?

默认已经有了linux服务器,且有root账号首先检查一下是否已经安装过java的jdk任意位置输入命令:whichjava像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...

取消回复欢迎 发表评论: