歡迎您光臨本站 註冊首頁

linux10-時間任務,nfs

←手機掃碼閱讀     火星人 @ 2014-03-08 , reply:0

時間有關的服務

at crond anacron

d代表 deamon

/etc/init.d/atd
/etc/init.d/crond
/etc/init.d/anacron


at
1,任務是一次性的
2,設置的時間點過了,就馬上執行


[root@li ~]# /etc/init.d/atd start
Starting atd: [ OK ]
[root@li ~]# chkconfig atd on


[root@li ~]# at 09:47 031711
at> echo "hello" > /dev/pts/2
at> --ctrl d結束
job 2 at 2011-03-17 09:47


at
-l 查看時間job 相當於atq
-d 刪除時間job 相當於atrm
-c 顯示時間job的內容
-f 後接一個腳本


[root@li ~]# atq
1 2017-11-03 09:46 a root
[root@li ~]# at -l
1 2017-11-03 09:46 a root
[root@li ~]# file /var/spool/at/a00001017fee0a
/var/spool/at/a00001017fee0a: Bourne shell script text executable
[root@li ~]# vim /var/spool/at/a00001017fee0a
--任務要執行的內容就在此文件的最后
[root@li ~]# at -c 1 --用命令查看1號job的內容


還有類似下面的時間推移的寫法
[root@li ~]# at now 10 minutes
[root@li ~]# at now 1 hours
[root@li ~]# at now 1 weeks
[root@li ~]# at now 1 months
[root@li ~]# at now 1 years


[root@li ~]# vim 1.sh

#!/bin/bash

echo -e "1\n2\n3\n4\n5\n6\n7\n8" > /dev/pts/2


[root@li ~]# at 10:07 031711 -f 1.sh
job 8 at 2011-03-17 10:07


[user1@li ~]$ at 10:09 031711
at> touch /home/user1/1
at>
job 9 at 2011-03-17 10:09


at任務的使用限制:
/etc/at.allow
/etc/at.deny


/etc/at.allow --在這裡可以寫上允許執行at的普通用戶,一個用戶一行;存在的話就不用去考慮at.deny
/etc/at.deny --在這裡可以定上拒絕執行at的普通用戶,一個用戶一行;如果at.allow不存在,才生效


--默認系統只有一個/etc/at.deny,並且為空,也就是說默認系統的任何普通用戶都可以使用at服務


===============================================================


batch 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 atrun.

batch 命令
當負載小於0.8時,才會執行 ;用法與at 一樣


小實驗:
[root@li ~]# batch -f 1.sh --負載小於0.8,立刻執行了

下面做一些操作,比如 cp 一個大文件,把負載提高到0.8以上
[root@li ~]# batch -f 1.sh --再次運行,沒有立刻執行
下面取消cp操作,使用top查看等待負載下降到0.8以下後上面的就會執行(可能有一點時間延遲,應該是程序設計的監控時間間隙在起作用),


補充:使用atrun -l 1.2 --可以把這個負載值設定為1.2

===============================================================

crontab


crontab特點:
1,能夠周期性的運行
2,時間過了就不執行,等下一個周期再執行


[root@li ~]# /etc/init.d/crond start
Starting crond: [ OK ]
[root@li ~]# chkconfig crond on


[root@li ~]# vim /etc/crontab --主配置文件


執行周期時間 執行身份 命令行 目錄
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily


22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly


分 時 日 月 周


時間格式
分 時 日 月 周
01 * * * *

分鐘: 0-59
小時: 0-24
日: 1-31 看月份定
月: 1-12
周 0-7 0和7都是代表星期天


時間格式的幾種特殊符號寫法
* 代表每分鐘,每小時,每日,每星期,每月..........
, 代表分隔時間 1,5,6,7
- 代表一個時間範圍  7-20
/n 代表每隔n個單位   /3

01 1,5,12,18,23 * * * --每天的1,5,12,18,23點的第一分鐘
01 * 5-15 * * --每月的5號到15號的每小時的第一分鐘
/2 * * * * --每兩分鐘
/3 1,3,8 1-5 3-6 7 --每年的3到6月的1到5號的1,3,8點的每三分鐘  (只有星期天才行)  


例子1;
vim /etc/crontab

* * * * * root echo 'crontab'> /dev/pts/2 --每分鐘都會去echo一個crontab到/dev/pts/2終端


例子2;
vim /etc/crontab
* * * * * root run-parts /etc/cron.minutely --做一個每分鐘都會執行的目錄,把每分鐘都要執行的腳本任務放到這個目錄里,注意要有執行許可權 


注意:
--修改了/etc/crontab的配置后,不需要重啟crond服務,但要保證是開啟狀態
--寫到主配置文件里的要寫執行身份,如果後面接的是目錄,則要加上run-parts,並且目錄內的腳本為可執行

命令設置方法:--不同的用戶都能擁有自己的時間任務(當然要對此任務有能執行的許可權)


crontab
-e --編輯自己的時間任務
-l --列出自己的時間任務
-r --刪除時間任務
-i --刪除前要求確認

[root@li ~]# crontab -e
30 18 * * * /sbin/init 0 --寫上每晚6點30分鐘自動關機    注意要root用戶寫才有效


[root@li ~]# crontab -l --列出自己的時間任務
30 18 * * * /sbin/init 0


[root@li ~]# crontab -r --全刪掉自己的時間任務,想要只刪除一行或者兩行,就要自己去手動刪除

crontab任務
/var/spool/cron/*      --*代表用戶

# cat /var/log/cron --查看這個日誌文件,可以看到所有的與crontab有關的日誌記錄


用root用戶管理普通用戶的時間任務
crontab -e -u d --編輯d民的時間任務
crontab -l -u d --列出d用戶的時間任務
crontab -r -u d --刪除d用戶的時間任務


crontab的使用限制: 和atd服務是一樣的


/etc/cron.allow --寫上允許使用crontab的普通用戶名,一行寫一個;有些文件的話就不考慮/etc/cron.deny
/etc/cron.deny  --寫上拒絕使用crontab的普通用戶名,一行寫一個;如果/cron.allow不存在,才生效
 


--實際應用時要注意的是:
如果時間任務比較多的情況下,都是周期性執行,根據任務的需求,負載,時間規定,最好是把各項任務給平均分開,防止任務時間點擠在一起,造成伺服器的某一時間點負載過高


============================================================


anacron

anacron 特點:
與crond服務配合使用,保證crond沒有執行的任務可以延後執行


配置文件: vim /etc/anacrontab

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

天數 延後時間(分鐘) 自定義的名字 執行命令串 目錄

1 65 cron.daily run-parts /etc/cron.daily


7 70 cron.weekly run-parts /etc/cron.weekly
30 75 cron.monthly run-parts /etc/cron.monthly

1 65 cron.daily run-parts /etc/cron.daily
上面這句話的意思為:
/etc/cron.daily目錄內的腳本在1天內沒有被執行過,那麼就推后65分鐘執行,執行完成後,就把時間給記錄到/var/spool/anacron/cron.daily文件里


#/etc/init.d/anacron start --啟服務

# cat /var/log/cron --查看日誌會有下面信息,前兩天講chkconfig時把這些服務都關了,已經有兩天沒做了,現在啟動起來,就會在65分鐘后做

Jul 8 11:45:27 li anacron[3104]: Anacron 2.3 started on 2011-07-08
Jul 8 11:45:27 li anacron[3104]: Will run job `cron.daily' in 65 min.
Jul 8 11:45:27 li anacron[3104]: Will run job `cron.weekly' in 70 min.
Jul 8 11:45:27 li anacron[3104]: Jobs will be executed sequentially

--一般來說,此服務不需要特定的配置,直接打開就好了


思考題:
現在我有下面的一個自動關機的時間任務
[root@li ~]# crontab -l
30 20 * * * /sbin/init 0

問: 如果我在晚上20點30分之前手動關閉了電腦,那是否第二天9點30開機后,會在10點35分自動關機呢?


答案:不能

crontab -e編寫的時間任務不在/etc/anacrontab文件里定義的三個目錄內,並沒有任何關係;


有興趣的可以在/etc/crontab定義一個目錄,寫上關機腳本,再在/etc/anacrontab里定義這個目錄來做實驗

=================================================================

NFS network file system


共享式集群文件系統


是由sun公司提出的 ,用來做網路之間的文件共享,是一種共享式集群文件系統

服務端:   nfs portmap

客戶端:  portmap

--nfs服務的描述
# description: NFS is a popular protocol for file sharing across
TCP/IP networks. This service provides NFS server
functionality, which is configured via the /etc/exports file.


--portmap服務的描述
# description: The portmapper manages RPC connections, which are
used by protocols such as NFS and NIS. The portmap server must
be running on machines which act as servers for protocols which
make use of the RPC mechanism.



[root@dns ~]# /etc/init.d/portmap stop
Stopping portmap: [ OK ]

[root@dns ~]# showmount -e 10.1.1.35
mount clntudp_create: RPC: Port mapper failure - RPC: Unable to receive

[root@dns ~]# /etc/init.d/portmap start
Starting portmap: [ OK ]
[root@dns ~]# showmount -e 10.1.1.35
mount clntudp_create: RPC: Program not registered

[root@dns ~]# /etc/init.d/nfs restart
[root@dns ~]# showmount -e 10.1.1.35
Export list for 10.1.1.35:
/vm *
/share/yum *
/share/soft *
/share/notes *

portmap 被用於NFS和NIS協議
RPC remote produrce call 遠程程序調用,埠註冊

portmap 111 埠 功能埠註冊
nfs 2049 埠
其他的rpc.xxx 啟動的埠是要向111埠註冊的


[root@li ~]# netstat -ntlup |grep 2049
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
udp 0 0 0.0.0.0:2049 0.0.0.0:* -

[root@li ~]# netstat -ntlup |grep :111
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 3687/portmap


udp 0 0 0.0.0.0:111 0.0.0.0:* 3687/portmap


還有下面幾個隨機埠
[root@dns ~]# netstat -ntlup |grep rpc
tcp 0 0 0.0.0.0:805 0.0.0.0:* LISTEN 3170/rpc.mountd
tcp 0 0 0.0.0.0:791 0.0.0.0:* LISTEN 3155/rpc.rquotad
udp 0 0 0.0.0.0:788 0.0.0.0:* 3155/rpc.rquotad
udp 0 0 0.0.0.0:802 0.0.0.0:* 3170/rpc.mountd

做nfs伺服器

[root@li ~]# /etc/init.d/portmap start
[root@li ~]# /etc/init.d/nfs start --把這兩個服務啟起來


配置文件:
vim /etc/exports

參數:
ro 只讀
rw 可讀可寫
root_squash 代表客戶端以nfsnobody用戶掛載,默認不寫就有
no_root_squash 代表客戶端以root用戶掛載
sync 同步
async 非同步


man exports --查看參數幫助


--下面是幫助文檔里的例子
# sample /etc/exports file
/ master(rw) trusty(rw,no_root_squash)
/projects proj*.local.domain(rw)
/usr *.local.domain(ro) @trusted(rw)
/home/joe pc001(rw,all_squash,anonuid=150,anongid=100)home/joe pc001(rw,all_squash,anonuid=150,ano
/pub (ro,insecure,all_squash)

主配置文件 
vim /etc/exports

/share/iso *(ro) --把/share/iso 共享給* (代表所有IP) ro (代表只讀)

/share/iso *(rw) --rw代表可讀可寫

/share/iso 10.1.1.0/24(ro) --只共享給10.1.1的網段的計算機訪問
/share/iso 10.1.1.0/255.255.255.0(ro)

/share/iso 10.1.1.218/255.255.255.255(ro) --定義只10.1.1.218這台計算機可以訪問
/share/iso 10.1.1.218/32(ro)

/share/iso 10.1.1.218/32(ro) 10.1.1.254/32(ro) --定義只有218和254這兩台可以訪問

關於nfs許可權:
客戶端掛載目錄的許可權為服務端共享目錄的許可權

nfs服務共享目錄的默認許可權規定是以nfsnobody這個用戶來掛載
在/etc/passwd下有這麼一句
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

注意:如果做了服務的話,許可權要由服務的許可權+系統的許可權合起來生效

也就是說,客戶端是否可以訪問,需要防火牆允許,服務允許,系統許可權允許,才可以訪問


/share/iso *(ro) 默認等於 /share/iso *(ro,root_squash)
--root_squash代表客戶端以nfsnobody用戶掛載


/test *(rw,no_root_squash)
--表示客戶端會以root的身份來掛載服務端的/test目錄


/share/iso 10.1.1.218/32(ro,no_root_squash) 10.1.1.254/32(ro,root_squash)
--no_root_squash代表客戶端以root用戶掛載,就算是218對/share/iso有w許可權,也不能寫,ro參數確定只讀


/share/iso 10.1.1.218/32(rw,anonuid=533,anongid=534) --指定客戶端以uid=533,gid=534掛載


--修改了/etc/exports以後,要重啟服務使之生效


不用重啟服務,使修改過的配置文件生效

exportfs -arv --重新讀取/etc/exports文件里的共享,並導入
-auv --卸載/etc/exports文件里的共享,別人showmount -e看不到,也掛載不了

[root@li iso]# cat /var/lib/nfs/etab
/share/install *(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,mapping=identity,anonuid=65534,anongid=65534)


/share/soft *(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,mapping=identity,anonuid=65534,anongid=65534)
/share/iso *(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,mapping=identity,anonuid=65534,anongid=65534)


cat /var/lib/nfs/xtab

--客戶端的操作
showmount -e 10.1.1.35

mount 10.1.1.35:/share/iso /mnt


擴展兩個命令去了解一下:
showmount -a
nfsstat


練習:
共享/test ,要求2.2.2.34可以讀,可以寫,並且寫入的屬主和屬組為root
2.2.2.0網段對其只讀
其它的不能訪問

--注意,有時候怎麼弄都還是不能掛載,注意一下防火牆的問題
iptables -F --清除防火牆規則
service iptables stop
chkconfig iptables off


關閉selinux
ls /selinux --如果有很多系統文件,則說明selinux是開啟的

關閉方法:
vim /etc/selinux/config

SELINUX=disabled --改成disabled

# reboot --selinux改完后需要重啟系統才生效


==================================================================

關於掛載相關的問題:

1,客戶端mount了server端的共享目錄,但沒有umount,但server先關機,會造成客戶端正常關機可能會關不了,或者再umount這個目錄也umount不了

2,把這一句 mount 10.1.1.35:/share/iso/ /mnt 做成開機自動掛載
第一種方式: vim /etc/fstab
10.1.1.35:/share/iso /mnt nfs defaults 0 0

mount -a命令去驗證,驗證前先把/mnt給umount

第二種方式:
vim /etc/rc.local
mount 10.1.1.35:/share/iso/ /mnt

autofs 自動掛載服務


# description: Automounts filesystems on demand


# vim /etc/auto.master
/misc /etc/auto.misc --表示/etc/auto.misc這個配置文件里的配置用來自動掛載到/misc目錄

# vim /etc/auto.misc
cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom

--光碟機被自動掛載到/misc/cd

--autofs應該在nfs客戶端去配置

vim /etc/auto.master
/nfs /etc/auto.nfs --寫上這句配置,表示/nfs目錄下的掛載選項是由/etc/auto.nfs配置文件決定的 /nfs目錄和/etc/auto.nfs文件都是不存在的,自己自定義建立

mkdir /nfs


vim /etc/auto.nfs
iso - 10.1.1.35:/share/iso
soft - 10.1.1.35:/share/soft
install - 10.1.1.35:/share/install
--這三句表示自動把10.1.1.35上的三個共享目錄分別掛載到/nfs/iso, /nfs/soft, /nfs/install三個目錄下,中間的-表示掛載參數,這裡用-是默認掛載


/etc/init.d/autofs restart


--掛載的目錄默認在/nfs目錄下用ls命令看不到, 但可以 cd /nfs/iso 進去, 這時會幫你自動掛載
大概五分鐘后,沒有使用的話,會自動umount掉


虛擬機上來驗證它的默認配置

1,在光碟機里加入iso
2,打開虛擬機,啟動autofs服務
3,ls /misc/cd 來驗證光碟機是否被自動掛載到/misc/cd目錄

自動掛載USB


[root@li ~]# vim /etc/auto.misc
usb -fstype=vfat :/dev/sdb1
--加上上面一句,那麼U盤插入電腦後,如果是vfat格式,並且磁碟名為sdb1,就會自動掛載到/misc/usb目錄


================================================================

ssh (secure shell)


openssh


sshd服務

[root@li ~]# vim /etc/ssh/sshd_config


man sshd_config --查看幫助


/etc/init.d/sshd --sshd的服務啟動腳本

[root@li ~]# netstat -ntlup |grep sshd
tcp 0 0 :::22 :::* LISTEN 2804/sshd

vim /etc/ssh/sshd_config --配置文件

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak --改配置文件前的好習慣,做一個備份

#Port 22 --默認埠是22
#Protocol 2,1 --協議版本現在是2版本
Protocol 2
#AddressFamily any
#ListenAddress 0.0.0.0 --監聽的地址範圍,默認 是所有
#ListenAddress ::

# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key --ssh 等效性,指的是ssh不需要密碼

# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h --每隔默認的一小時重新建立一次key
#ServerKeyBits 768 --server key的長度
# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility local 7 --日誌等級
#SyslogFacility AUTHPRIV
#LogLevel INFO
# Authentication:

#LoginGraceTime 2m --寬限時間2分鐘
#PermitRootLogin yes --允許root用戶登錄
#StrictModes yes
#MaxAuthTries 6


例子一:

修改ssh服務默認埠,增加安全性
#Port 22
Port 222 --修改埠

/etc/init.d/sshd restart --重啟服務

[root@li ~]# netstat -ntlup |grep 222 --服務重啟之後,看到監聽的埠號為222
tcp 0 0 :::222 :::* LISTEN 3088/sshd


[root@snake ~]# ssh 10.1.1.35 -p 222 --加上-p參數後接埠號
scp -P 222 10.1.1.35:/etc/grub.conf /root --要使用大寫p


vim /etc/services --參考這個文件,有服務與對應的埠,埠不要亂改

埠有關知識:
範圍:0-65535
註冊埠:0-1024
隨機埠:1025~65535

例二:禁用root用戶登錄
# vim /etc/ssh/sshd_config
PermitRootLogin no --把這個改為no

# /etc/init.d/sshd restart --重啟服務


然後使用ssh來驗證,root用戶登錄不了


例三:

允許空密碼ssh登陸
在/etc/ssh/sshd_config里加上

PermitEmptyPasswords yes --允許空密碼登陸
--這個參數可以從man sshd_conf --來查看得到,默認值為no


然後去掉某一個用戶在/etc/passwd第二欄的x

再ssh測試


例四:

ssh等效
原理:產生一對密鑰,自己持有一個私鑰,公鑰給對方,需要一對才能解密


ssh-keygen --輸入這個命令后,三次回車產生空密碼key對

[root@li ~]# ssh-keygen
Generating public/private rsa key pair. --默認是rsa加密方式
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
ad:2d:f9:af:8a:c7:ab:0b:8e:de:47:ed:73:68:f6:b3 root@li.cluster.com


scp /root/.ssh/id_rsa.pub 10.1.1.104:/root/.ssh/authorized_keys--把公鑰傳給104的機器后,重命令名為authorized_keys

ssh 10.1.1.104 --直接ssh不需要密碼了

ssh-keygen -t dsa --可以這樣使用dsa的加密方式
ssh-keygen -t rsa --默認的加密方式

練習:三台機的user1用戶之間全部ssh不需要密碼,並且ssh自己也不需要密碼


步驟:三台機都產生空密鑰對 --注意是要用user1用戶去使用ssh-keygen去產生

最終,每台機都有/home/user1/.ssh/authorized_keys,並且文件內包括三段信息,這三段信息分別為三台機的id_rsa.pub的內容


a
b
c

例五:ssh在服務里配置拒絕普通用戶(a和b)登錄

--提示man sshd_config 查看denyuser參數的使用方法


================================================================


比如要寫一個備份的自動運行任務
要求是:
1.每年的第一天(1月1號)備份所有數據
2.每季度的第一天(指的4月,7月,10月這三個月)備份季度內產生的所有數據(如7月1號備份4月到7月產生的數據)
3.別的月份的第一天(除1,4,7,10月外)備份每月產生的所有數據(如5月1號則備份4月內產生的數據)
4,一年內的每個星期天備份這個星期以來的數據(如10月8號為星期天,則備份它這個星期內產生的數據)
5,除了上面定義的特定天數外(除了每月1號和星期天),每天備份前一天產生的數據

--上面要注意的是:

6.注意時間的重合性,如某月的1號正好是星期天的話,則會重複
7.要求上面只用寫出時間,如何備份不用管,並假設都是每晚凌晨的3點01分做

不考慮重複時間
01 3 1 1 *
01 3 1 4,7,10 *
01 3 1 2,3,5,6,8,9,11,12 *
01 3 * * 7
01 3 * * *

考慮重複時間
01 3 1 1 1-6
01 3 1 4,7,10 1-6
01 3 1 2,3,5,6,8,9,11,12 1-6
01 3 2-31 * 7
01 3 2-31 * 1-6


思考:如果不是很好表示,是否可以改寫一下策略,讓它更好表示?
如果我把第四條換成每月10號和20號分別備份一次,這樣的備份策略是否對於crontab更好寫了,嘗試寫一下


01 3 1 1 *
01 3 1 4,7,10 *
01 3 1 2,3,5,6,8,9,11,12 *
01 3 10,20 * *
01 3 2-9,11-19,21-31 * *

二:配置好自己的autofs服務,自動掛載2.2.2.35:/share/110620這個筆記目錄到你的/nfs/notes目錄.
每天下午5點01分自動把所有筆記拷貝到自己的筆記目錄
並將自己的筆記目錄使用nfs共享給所有人,但只允許2.2.2.35可以以root身份掛載


vim /etc/auto.master
/nfs /etc/auto.nfs

vim /etc/auto.nfs
notes - 2.2.2.35:/share/110620

vim /1.sh

#!/bin/bash

cd /nfs/notes
cp /nfs/notes/* /notes

crontab -e
01 17 * * * sh /1.sh


vim /etc/exports
/notes 2.2.2.35/32(rw,no_root_squash)

本文出自 「linuxart」 博客,請務必保留此出處http://linuxart.blog.51cto.com/686203/843945


[火星人 ] linux10-時間任務,nfs已經有629次圍觀

http://coctec.com/docs/linux/show-post-45749.html