最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

PHP之Linux(十)计划任务与备份策略

XAMPP下载 admin 616浏览 0评论

计划任务
什么是计划任务
所谓计划任务就是指某一个时间系统自动做一件事情如输入指令或者保存文件等等
计划任务分两种:一次性计划任务命令(at)和周期性计划任务命令(crontab)

计划任务使用场景
(此处参见鸟哥教材第15章)

基本上 Linux 系統常見的例行性任務有:

進行登錄檔的輪替 (log rotate):
Linux 會主動的將系統所發生的各種資訊都記錄下來,這就是登錄檔 (第十八章)。 由於系統會一直記錄登錄資訊,所以登錄檔將會越來越大!我們知道大型檔案不但佔容量還會造成讀寫效能的困擾, 因此適時的將登錄檔資料挪一挪,讓舊的資料與新的資料分別存放,則比較可以有效的記錄登錄資訊。這就是 log rotate 的任務!這也是系統必要的例行任務;

登錄檔分析 logwatch 的任務:
如果系統發生了軟體問題、硬體錯誤、資安問題等,絕大部分的錯誤資訊都會被記錄到登錄檔中, 因此系統管理員的重要任務之一就是分析登錄檔。但你不可能手動透過 vim 等軟體去檢視登錄檔,因為資料太複雜了! 我們的 CentOS 提供了一隻程式『 logwatch 』來主動分析登錄資訊,所以你會發現,你的 root 老是會收到標題為 logwatch 的信件,那是正常的!你最好也能夠看看該信件的內容喔!

建立 locate 的資料庫:
在第六章我們談到的 locate 指令時, 我們知道該指令是透過已經存在的檔名資料庫來進行系統上檔名的查詢。我們的檔名資料庫是放置到 /var/lib/mlocate/ 中。 問題是,這個資料庫怎麼會自動更新啊?嘿嘿!這就是系統的例行性工作所產生的效果啦!系統會主動的進行 updatedb 喔!

man page 查詢資料庫的建立:
與 locate 資料庫類似的,可提供快速查詢的 man page db 也是個資料庫,但如果要使用 man page 資料庫時,就得要執行 mandb 才能夠建立好啊! 而這個 man page 資料庫也是透過系統的例行性工作排程來自動執行的哩!

RPM 軟體登錄檔的建立:
RPM (第二十二章) 是一種軟體管理的機制。由於系統可能會常常變更軟體, 包括軟體的新安裝、非經常性更新等,都會造成軟體檔名的差異。為了方便未來追蹤,系統也幫我們將檔名作個排序的記錄呢! 有時候系統也會透過排程來幫忙 RPM 資料庫的重新建置喔!

移除暫存檔:
某些軟體在運作中會產生一些暫存檔,但是當這個軟體關閉時,這些暫存檔可能並不會主動的被移除。 有些暫存檔則有時間性,如果超過一段時間後,這個暫存檔就沒有效用了,此時移除這些暫存檔就是一件重要的工作! 否則磁碟容量會被耗光。系統透過例行性工作排程執行名為 tmpwatch 的指令來刪除這些暫存檔呢!

與網路服務有關的分析行為:
如果你有安裝類似 WWW 伺服器軟體 (一個名為 apache 的軟體),那麼你的 Linux 系統通常就會主動的分析該軟體的登錄檔。 同時某些憑證與認證的網路資訊是否過期的問題,我們的 Linux 系統也會很親和的幫你進行自動檢查!

crontab 与at区别
计划任务有两种形式:进行简单的一次性执行;定期进行指定的行为。

cron是计划任务,是依靠底层驻留程序crond的.at一般进行简单的一次性执行,cron则可以定期进行指定的行为.

cron把命令行保存在/etc/crontab文件里,每个系统用户如果设置了自己的cron,那都会在/var/spool/cron下面有对应用户名的crontab。
无论编写/var/spool/cron目录内的文件还是/etc/crontab文件,都能让cron准确无误地执行安排的任务,区别是/var/spool/cron下各系统用户的crontab文件是对应用户级别的的任务配置,而/var/crontab文件则是对应系统级别的任务配置。
cron服务器每分钟读取一次/var/crontab/cron目录内的所有文件和/etc/crontab文件。

at :at 是個可以處理僅執行一次就結束排程的指令,不過要執行 at 時, 必須要有 atd 這個服務 (第十七章) 的支援才行。在某些新版的 distributions 中,atd 可能預設並沒有啟動,那麼 at 這個指令就會失效呢!不過我們的 CentOS 預設是啟動的!

crontab :crontab 這個指令所設定的工作將會循環的一直進行下去! 可循環的時間為分鐘、小時、每週、每月或每年等。crontab 除了可以使用指令執行外,亦可編輯 /etc/crontab 來支援。 至於讓 crontab 可以生效的服務則是 crond 這個服務喔!
底下我們先來談一談 Linux 的系統到底在做什麼事情,怎麼有若干多的工作排程在進行呢?然後再回來談一談 at 與 crontab 這兩個好東西!

at命令
at的用法:如果当前时间为2013年3月2日
at 18:00 2013-03-3
>w > /root/who.txt
>init 0
>(输入ctrl+d结束编辑)

*此时将意味着我们的系统将在第二天的傍晚6点执行两个命令,一个是将当时系统访问的客户列表做一个另存为,另一个是关机。
这个命令将是一次性执行。*

这个任务会生成一个可执行文件到/var/spool/at/这个目录中可以通过cat查看其中文件内容

atq或者at -l:这两个命令是将制定的计划列出清单会 工作的id和执行时间

atrm [id]或者at -d [id]:这两个命令是将指定的任务删除,具体删哪个任务是由任务的id决定的。

at -c [id] :这个命令是通过工作id来查看计划中的内容的等同于直接查看/var/spool/at/目录中的可执行文件。

at这个功能本身是一项开机及执行的服务,利用chkconfig –list atd可以看到atd这个服务是在全字符模式和图形模式默认开启的
。如果这个服务被关闭了我们也可以通过两种方式来开启他。

第一种 /etc/init.d/atd {start|stop|restar|stadues|…}
第二种 service atd {start|stop|restar|stadues|…}

at有黑白名单分别为
/etc/at.deny黑名单此名单中的用户不可以使用at命令centos默认有这个文件。
/etc/at.allow白名单这个文件默认没有可以自己创建,这个文件意味着只有白名单的用户可以使用at功能其他人都不可以。
如果两个文件中都有同一个用户那么allow优先。

有的操作系统可能没有安装at功能我们可以通过rpm -q at 来查看at工具有没有安装如果没有下载一个装上即可,centos系统自带。

说到at也可以顺带提一个命令batch。
batch的用法和at基本相同而且batch可以不指定时间,或者即使指定了时间到时也未必会执行计划的操作。
因为batch会考虑系统的负载状况当负载状况低于0.8才会执行其中的操作。

crontab命令
下面来介绍周期性计划cron
所谓周期性就是设定等任务计划会根据你指定的时间条件进行周期性的执行。这样就不用像at一样一条一条制定了。
用法具体如下:

crontab -e -u (user)

这是对用户进行任务编辑如果直接输入crontab -e 则是对当前用户建立计划

进入计划编辑界面后就可以编辑计划了,计划是以行分开的。每一行是一个计划,格式如下:

分 (0~59) 时(0~23)日期 (1~31)月(1~12)星期(0~7)命令

如果用*则表示通配其中星期0和7都代表星期天。

如果我们想在每年的2月和12月的1号和28号的晚上八点到12点每半个小时向系统所在的所有用户广播see your back,编辑为

/30 20-0 1,28 2,12 wall “see your back”

注意:由于每年的星期几和日期搭配是会变化的,所以星期几和日期时间不要同时写,以免系统会真的等到若干年后两个时间重合再运行你指定的命令。

如果我们是root用户时也可以通过vim在家目录编辑一个内容为周期运行的指令文件,

这样我们通过命令

crontab -u student /root/文件名

来为student用户设置计划。

计划编辑好后查询命令为

crontab -l -u (user)

同时也可以到/var/spool/cron/这个目录中,通过cat查看其中文件内容

删除命令

crontab -r -u (user)

这种删除方式会将用户的所有计划全盘删除,因此不建议使用,还是应该进入编辑模式来有目的的删除。
这个周期性计划服务也是默认开启的开关的方法也是两种

第一种 /etc/init.d/crond {start|stop|restar|stadues|…}
第二种 service crond {start|stop|restar|stadues|…}

cron有黑白名单分别为

/etc/cron.deny黑名单此名单中的用户不可以使用crontab命令centos默认有这个文件。
/etc/cron.allow白名单这个文件默认没有可以自己创建,这个文件意味着只有白名单的用户可以使用crontab其他人都不可以。

cron功能是否安装可以通过rpm -q vixie-cron来确认。

一些注意事項
資源分配不均的問題
流量

區域內其他 PC 的流量偵測

CPU 使用率

RAM 使用率

線上人數即時偵測

取消不要的輸出項目
另外一個困擾發生在『 當有執行成果或者是執行的項目中有輸出的資料時,該資料將會 mail 給 MAILTO 設定的帳號 』,好啦,那麼當有一個排程一直出錯(例如 DNS 的偵測系統當中,若 DNS 上層主機掛掉,那麼你就會一直收到錯誤訊息!)怎麼辦?呵呵!還記得第十章談到的資料流重導向吧? 直接以『資料流重導向』將輸出的結果輸出到 /dev/null 這個垃圾桶當中就好了!

安全的檢驗
很多時候被植入木馬都是以例行命令的方式植入的,所以可以藉由檢查 /var/log/cron 的內容來視察是否有『非您設定的 cron 被執行了?』這個時候就需要小心一點囉!

週與日月不可同時並存
另一個需要注意的地方在於:『你可以分別以週或者是日月為單位作為循環,但你不可使用「幾月幾號且為星期幾」的模式工作』。 這個意思是說,你不可以這樣編寫一個工作排程:

备份策略
备份概述
万一不幸你的 Linux 被黑客入侵了、或是你的 Linux 系统由於硬件关系 (不论是天灾还是人祸) 而挂掉了!这个时候,请问如何快速的回复你的系统呢?如果有备份数据的话, 那么恢复系统所花费的时间与成本将降低相当的多!平时最好就养成备份的习惯, 以免突然间的系统损毁造成手足无措!

备份场景
造成系统损毁的原因:

硬件问题,例如:硬盘损坏。
软件问题,例如:手滑一下,在结果指令列里输入 rm -rf /home,造成家目录删掉了。
主机角色不同,备份任务则不同:

针对个人桌面计算机,使用整个系统备份,Norton的Ghost备份大师。因为数据量变化不大,所以备份频率方面也不需要非常的频繁。
针对主机有提供Internet服务的,例如论坛,随数据量不大,但每天都有数据量流入,备份频率需求的考虑很重要。
备份因素的考虑:
由於计算机 (尤其是目前的计算机,操作频率太高、硬件良率太差、使用者操作习惯不良、 『某些』操作系统的死机率太高….) 的稳定性较差,所以罗!备份的工作就越来越重要了! 那么一般我们在备份时考虑的因素有哪些呢?

备份哪些档案;
哪些数据对系统或使用者来说是重要的?那些数据就是值得备份的数据!例如 /etc/* 及 /home/* 等。

选择哪些备份媒介;
是可读写光盘、另一颗硬盘、同一颗硬盘的不同 partition、还是使用网络备援系统? 哪一种的速度最快,最便宜,可将数据保存最久?这都可以考虑的。

备份的方式;
是以完整备份(类似 ghost)来备份所有数据,还是使用差异备份仅备份有被更动过的数据即可?

备份的频率;
例如 MySQL 数据库是否天天备份、若完整备份,需要多久进行一次?

备份使用工具;
是利用 tar 、 cpio 、 dd 还是 dump 等等的备份工具?

哪些 Linux 数据具有备份的意义
一般来说, 备份最重要的文件(关键数据备份),而不是整个系统都备份起来 (完整备份, Full backup)!那么哪些文件是有必要备份的呢?具有备份意义的文件通常可以粗分为两大类,一类是系统基本配置资讯、一类则是类似网络服务的内容数据。 那么各有哪些文件需要备份的呢?我们就来稍微分析一下。

操作系统本身需要备份的文件:
这方面的文件主要跟『帐号与系统配置档』有关系! 主要有哪些帐号的文件需要备份呢?就是 /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow, /home 底下的使用者家目录等等, 而由於 Linux 默认的重要参数档都在 /etc/ 底下,所以只要将这个目录备份下来的话, 那么几乎所有的配置档都可以被保存的!

至於 /home 目录是一般用户的家目录,自然也需要来备份一番!再来,由於使用者会有邮件吧!所以呢,这个 /var/spool/mail/ 内容也需要备份呦!另外,由於如果你曾经自行更动过核心,那么 /boot 里头的资讯也就很重要罗!所以罗,这方面的数据你必须要备份的文件为:

/etc/ 整个目录
/home 整个目录
/var/spool/mail
/boot
/root

如果你自行安装过其他的套件,那么 /usr/local/ 或 /opt 也最好备份一下!

网络服务的数据库方面:
这部份的数据可就多而且复杂了,首先是这些网络服务软件的配置档部分, 如果你的网络软件安装都是以原厂提供的为主,那么你的配置文件大多是在 /etc 底下,所以这个就没啥大问题!但若你的套件大多来自於自行的安装,那么 /usr/local 这个目录可就相当的重要了!

再来,每种服务提供的数据都不相同,这些数据很多都是人们提供的!举例来说,你的 WWW 服务器总是需要有人提供网页文件吧?否则浏览器来是要看啥咚咚?你的讨论区总是得要写入数据库系统吧? 否则讨论的数据如何升级与记载?所以,使用者主动提供的文件,以及服务运行过程会产生的数据, 都需要被考虑来备份。若我们假设我们提供的服务软件都是使用原厂的 RPM 安装的!所以要备份的数据文件有:

1. 软件本身的配置文件,例如:/etc/ 整个目录,/usr/local/ 整个目录
2. 软件服务提供的数据,以 WWW 及 MySQL 为例:
WWW 数据:/var/www 整个目录或 /srv/www 整个目录,及系统的使用者家目录
MySQL : /var/lib/mysql 整个目录
3. 其他在 Linux 主机上面提供的服务之数据库文件!

推荐需要备份的目录:
由上面的介绍来看的话,如果你的硬件或者是由於经费的关系而无法全部的数据都予以备份时, 鸟哥建议你至少需要备份这些目录呦!

/boot
/etc
/home
/root
/usr/local(或者是 /opt 及 /srv 等)
/var(注:这个目录当中有些缓存目录则可以不备份!)

不需要备份的目录:
有些数据是不需要备份的啦!例如我们在第六章文件权限与目录配置里头提到的 /proc 这个目录是在记录目前系统上面正在跑的程序,这个数据根本就不需要备份的呢!此外,外挂的机器,例如 /mnt 或 /media 里面都是挂载了其他的硬盘装置、光驱、软盘机等等,这些也不需要备份吧? 因此以下这些目录可以不需要备份啦!

/dev :这个随便你要不要备份
/proc:这个真的不需要备份啦!
/mnt 与 /media:如果你没有在这个目录内放置你自己系统的东西,也不需要备份
/tmp :干嘛存缓存档!不需要备份!

备份用储存媒体的选择
光驱: /dev/cdrom (其实应该是 /dev/sdX 或 /dev/hdX)
磁带机: /dev/st0 (SCSI 介面), /dev/ht0 (IDE 介面)
软盘机: /dev/fd0, /dev/fd1
硬盘机: /dev/hd[a-d][1-63] (IDE), /dev/sd[a-p][1-16] (SCSI/SATA)
外接式 U盘 硬盘机: /dev/sd[a-p][1-16] (与 SCSI 相同)
打印机: /dev/lp[0-2]
备份策略
鸟哥的『鸟站』的备份策略是这样的:

主机硬件:使用一个独立的 filesystem 来储存备份数据,此 filesystem 挂载到 /backup 当中;
每日进行:目前仅备份 MySQL 数据库;
每周进行:包括 /home, /var, /etc, /boot, /usr/local 等目录与特殊服务的目录;
自动处理:这方面利用 /etc/crontab 来自动提供备份的进行;
异地备援:每月定期的将数据分别 (a)烧录到光盘上面 (b)使用网络传输到另一部机器上面。
备份命令
tar cp at crontab

转载请注明:XAMPP中文组官网 » PHP之Linux(十)计划任务与备份策略

您必须 登录 才能发表评论!