Linux指令:背景運作程式、批處理、開機運作
讓程式在背景運作
使用者有時的程式有可能要花費很多時間,如果将它放在前台運作,将導緻無法繼續做其他事情,最好的方法就是将它放在背景運作,甚至可能希望在使用者登出系統後,程式還可以繼續運作。讓我們看看那如何實作這一目的。
1,在背景運作程式的&、bg指令
将程式放到背景運作的最簡單方法就是在指令最後加上“&”,範例如下:
[tony@free root]# updatedb & ← 在背景執行 locate 資料庫更新指令
[tony@free root]# bg ← 将更新操作放到背景運作
2,前台運作的程式fg指令
如果使用者目前已有程式在背景運作,可以輸入fg指令,将它從背景中移到前台運作:
[tony@free root]# fg ← 放到前台執行的指令會顯示出來
3,在退出後讓程式繼續運作的nohup指令
此指令可使使用者退出系統後,程式繼續運作。範例如下:
[tony@free rony]$ nohup myserver &
然後使用者就可以退出了,當再次登入的時候,可以用ps –aux指令看到程式仍在背景中運作。
linux批處理
将要執行的指令放入文本檔案,如
rm -fv *.o;ls -al;
(可以寫一些shell普通指令,指令用分号隔開)
然後改變檔案屬性為可執行即可
2.執行方法
(1)在控制台輸入:
sh clean
(2)先給與腳本可執行權限:
chmod 777 clean
然後直接執行:
./clean
linux自動運作程式
1.開機啟動時自動運作程式
Linux加載後, 它将初始化硬體和裝置驅動, 然後運作第一個程序init。init根據配置檔案繼續引導過程,啟動其它程序。通常情況下,修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目錄下的腳本檔案,可以使init自動啟動其它程式。例如:編輯 /etc/rc.d/rc.local 檔案,在檔案最末加上一行“xinit”或“startx”,可以在開機啟動後直接進入X-Window。
2.登入時自動運作程式
使用者登入時,bash首先自動執行系統管理者建立的全局登入script :/ect/profile。然後bash在使用者起始目錄下按順序查找三個特殊檔案中的一個:/.bash_profile、/.bash_login、 /.profile,但隻執行最先找到的一個。
是以,隻需根據實際需要在上述檔案中加入指令就可以實作使用者登入時自動運作某些程式(類似于DOS下的Autoexec.bat)。
3.登出時自動運作程式
登出時,bash自動執行個人的登出腳本/.bash_logout。例如,在/.bash_logout中加入指令“tar -cvzf c.source.tgz *.c”,則在每次登出時自動執行 “tar” 指令備份 *.c 檔案。
4.定期自動運作程式
Linux有一個稱為crond的守護程式,主要功能是周期性地檢查 /var/spool/cron目錄下的一組指令檔案的内容,并在設定的時間執行這些檔案中的指令。使用者可以通過crontab 指令來建立、修改、删除這些指令檔案。
例如,建立檔案crondFile,内容為“00 9 23 Jan * HappyBirthday”,運作“crontab cronFile”指令後,每當元月23日上午9:00系統自動執行“HappyBirthday”的程式(“*”表示不管當天是星期幾)。
5.定時自動運作程式一次
定時執行指令at 與crond 類似(但它隻執行一次):指令在給定的時間執行,但不自動重複。at指令的一般格式為:at [ -f file ] time ,在指定的時間執行file檔案中所給出的所有指令。也可直接從鍵盤輸入指令:
$ at 12:00
at>mailto Roger -s ″Have a lunch″ < plan.txt
at>Ctr-D
Job 1 at 2000-11-09 12:00
2000-11-09 12:00時候自動發一标題為“Have a lunch”,内容為plan.txt檔案内容的郵件給Roger。?9 12:00
2000-11-09 12:00時候自動發一标題為“Have a lunch”,内容為plan.txt檔案内容的郵件給Roger。er。ger。er。
linux下的crontab服務:
1、crontab
是用來讓使用者在固定時間或固定間隔執行程式之用
在linux平台上如果需要實作任務排程功能可以編寫cron腳本來實作。
以某一頻率執行任務
linux預設會啟動crond程序,crond程序不需要使用者啟動、關閉。
crond程序負責讀取排程任務并執行,使用者隻需要将相應的排程腳本寫入cron的排程配置檔案中。
cron的排程檔案有以下幾個:
1. crontab
2. cron.d
3. cron.daily
4. cron.hourly
5. cron.monthly
6. cron.weekly
如果用的任務不是以hourly monthly weekly方式執行,則可以将相應的crontab寫入到crontab 或cron.d目錄中。
示例:
每隔一分鐘執行一次腳本 /opt/bin/test-cron.sh
可以在cron.d建立腳本 echo-date.sh
内容為
*/1 * * * * root /opt/bin/test-cron.sh
2、cron
是一個linux下的定時執行工具,可以在無需人工幹預的情況下運作作業。由于Cron 是Linux的内置服務,如果它不自動起來,可以用以下的方法啟動、關閉這個服務:
/sbin/service crond start //啟動服務
/sbin/service crond stop //關閉服務
/sbin/service crond restart //重新開機服務
/sbin/service crond reload //重新載入配置
你也可以将這個服務在系統啟動的時候自動啟動:
在/etc/rc.d/rc.local這個腳本的末尾加上:
/sbin/service crond start
現在Cron這個服務已經在程序裡面了,我們就可以用這個服務了
檢視服務是否已經運作用 ps -ax | grep cron
3、crontab指令
檢視該使用者下的crontab服務是否建立成功, 用 crontab -l 指令
指令 which php 檢視linux下安裝的php的路徑
cron服務提供crontab指令來設定cron服務的,以下是這個指令的一些參數與說明:
crontab -u //設定某個使用者的cron服務,一般root使用者在執行這個指令的時候需要此參數
crontab -l //列出某個使用者cron服務的詳細内容
crontab -r //删除沒個使用者的cron服務
crontab -e //編輯某個使用者的cron服務
比如說root檢視自己的cron設定:crontab -u root -l
再例如,root想删除fred的cron設定:crontab -u fred -r
在編輯cron服務時,編輯的内容有一些格式和約定,輸入:crontab -u root -e
進入vi編輯模式,編輯的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt
任務排程的crond常駐指令crond 是linux用來定期執行程式的指令。當安裝完成作業系統之後,預設便會啟動此
任務排程指令。crond指令每分锺會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。
crontab指令選項:
-u指定一個使用者
-l列出某個使用者的任務計劃
-r删除某個使用者的任務
-e編輯某個使用者的任務
4、cron檔案文法:
分 小時 日 月 星期 指令
0-59 0-23 1-31 1-12 0-6 command (取值範圍,0表示周日一般一行對應一個任務)
記住幾個特殊符号的含義:
“*”代表取值範圍内的數字,
“/”代表”每”,如每2分鐘:*/2
“-”代表從某個數字到某個數字,
“,”分開幾個離散的數字
5、任務排程設定檔案的寫法
可用crontab -e指令來編輯,編輯的是/var/spool/cron下對應使用者的cron檔案,也可以直接修改/etc/crontab檔案
具體格式如下:
Minute Hour Day Month Dayofweek command
分鐘 小時 天 月 天每星期 指令
每個字段代表的含義如下:
Minute 每個小時的第幾分鐘執行該任務
Hour 每天的第幾個小時執行該任務
Day 每月的第幾天執行該任務
Month 每年的第幾個月執行該任務
DayOfWeek 每周的第幾天執行該任務
Command 指定要執行的程式
在這些字段裡,除了“Command”是每次都必須指定的字段以外,其它字段皆為可選
字段,可視需要決定。對于不指定的字段,要用“*”來填補其位置。
舉例如下:
5 * * * * ls 指定每小時的第5分鐘執行一次ls指令
30 5 * * * ls 指定每天的 5:30 執行ls指令
30 7 8 * * ls 指定每月8号的7:30分執行ls指令
30 5 8 6 * ls 指定每年的6月8日5:30執行ls指令
30 6 * * 0 ls 指定每星期日的6:30執行ls指令[注:0表示星期天,1表示星期1,
以此類推,也可以用英文來表示,sun表示星期天,mon表示星期一等。]
30 3 10,20 * * ls 每月10号及20号的3:30執行ls指令[注:“,”用來連接配接多個不連續的時段]
25 8-11 * * * ls 每天8-11點的第25分鐘執行ls指令[注:“-”用來連接配接連續的時段]
*/15 * * * * ls 每15分鐘執行一次ls指令 [即每個小時的第0 15 30 45 60分鐘執行ls指令 ]
30 6 */10 * * ls 每個月中,每隔10天6:30執行一次ls指令[即每月的1、11、21、31日是的6:30執行一次ls 指令。 ]
每天7:50以root 身份執行/etc/cron.daily目錄中的所有可執行檔案
50 7 * * * root run-parts /etc/cron.daily [ 注:run-parts參數表示,執行後面目錄中的所有可執行檔案。 ]
6、 新增排程任務
新增排程任務可用兩種方法:
1)、在指令行輸入: crontab -e 然後添加相應的任務,wq存盤退出。
2)、直接編輯/etc/crontab 檔案,即vi /etc/crontab,添加相應的任務。
7、 檢視排程任務
crontab -l //列出目前的所有排程任務
crontab -l -u jp //列出使用者jp的所有排程任務
8、 删除任務排程工作
crontab -r //删除所有任務排程工作
9、 任務排程執行結果的轉向
例1:每天5:30執行ls指令,并把結果輸出到/jp/test檔案中
30 5 * * * ls >/jp/test 2>&1
注:2>&1 表示執行結果及錯誤資訊。
編輯/etc/crontab 檔案配置cron
cron服務每分鐘不僅要讀一次/var/spool/cron内的所有檔案,還需要讀一次 /etc/crontab,是以我們配置這個檔案也能運用cron服務做一些事情。
用crontab配置是針對某個使用者的,而編輯/etc/crontab是針對系統的任務。此檔案的檔案格式是:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出現錯誤,或者有資料輸出,資料作為郵件發給這個帳号
HOME=/ //使用者運作的路徑,這裡是根目錄
# run-parts
01 * * * * root run-parts /etc/cron.hourly //每小時執行/etc/cron.hourly内的腳本
02 4 * * * root run-parts /etc/cron.daily //每天執行/etc/cron.daily内的腳本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期執行 /etc/cron.weekly内的腳本
42 4 1 * * root run-parts /etc/cron.monthly //每月去執行/etc/cron.monthly内的腳本
大家注意”run-parts”這個參數了,如果去掉這個參數的話,後面就可以寫要運作的某個腳本名,而不是檔案夾名了
例如:
1) 在指令行輸入: crontab -e 然後添加相應的任務,wq存盤退出。
2)直接編輯/etc/crontab 檔案,即vi /etc/crontab,添加相應的任務
11 2 21 10 * rm -rf /mnt/fb
10.計劃讓你誤執行PHP腳本
因為php腳本中可能有包含(require,include)以及相對路徑,絕對路徑,是以最好是先cd,然後再執行。如下:
*/10 * * * * cd /var/www/cron && /usr/bin/php /var/www/cron.php
---------以下是一個範例--------
建立一個空檔案backup.sh,打開輸入以下内容
#/usr/sh/backupdb.sh
#1 backup db
cd /data/backup/
str=/data/backup/JobResume$(date +%Y%m%d)
str2=/data/backup/JobResume$(date +%Y%m%d).tar.gz
echo $str
/usr/mongodb/bin/mongodump --host 192.168.225.131 --port 37017 -d MongoModelJobResume -o $str
#2 tar backup file
tar -zcvPf $str2 $str
#3 sync to local
#no
#tar -xzvPf /data/backup/MongoModelJobResume.tar.gz
--------- end ----------------
#賦執行權限
chmod 777 backupdb.sh
#執行