⑴ 在linux下怎麼讓一個腳本定時運行
Linux中,周期執行的任務一般由cron這個守護進程來處理 ps -ef | grep cron
cron讀取一個或多個配置文件,這些配置文件中包含了命令行及其調用時間。
cron的配置文件稱為「crontab」,是「cron table」的簡寫。
一、 cron在3個地方查找配置文件(設置shell腳本):
1、/var/spool/cron/yanggang 這個目錄下存放的是每個用戶(包括root)的crontab任務,每個任務以創建者的名字命名,比如用戶tom建的crontab任務對應的文件就是/var/spool/cron/tom
yanggang@barry$ sudo ls -l /var/spool/cron/(或有時是 /var/spool/cron/crontabs/)
-rw------- 1 root crontab 1071 2011-09-19 17:20 root
-rw------- 1 yanggang crontab 1176 2011-09-24 11:07 yanggang
一般一個用戶最多隻有一個crontab文件(如:root, yanggang等),其對應日誌在/var/spool/mail/root(或/var/spool/mail/yanggang)文件里
2、/etc/crontab 這個文件負責安排由系統管理員制定的維護系統以及其他任務的crontab。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# .---------------- 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
# | | | | |
# * * * * * command to be executed
例如:
*/5 * * * * root /usr/libexec/atrun
minute:代表一小時內的第幾分,范圍 0-59。
hour:代表一天中的第幾小時,范圍 0-23。
mday:代表一個月中的第幾天,范圍 1-31。
month:代表一年中第幾個月,范圍 1-12。
wday:代表星期幾,范圍 0-7 (0及7都是星期天)。
who:要使用什麼身份執行該指令,當您使用 crontab -e 時,不必加此欄位。
command:所要執行的指令。
3、/etc/cron.d/ 這個目錄用來存放任何要執行的crontab文件或腳本。
二、 許可權
crontab許可權問題到/var/adm/cron/下一看,文件cron.allow和cron.deny是否存在
用法如下:
1、如果兩個文件都不存在,則只有root用戶才能使用crontab命令。
2、如果cron.allow存在但cron.deny不存在,則只有列在cron.allow文件里的用戶才能使用crontab命令,如果root用戶也不在裡面,則root用戶也不能使用crontab。
3、如果cron.allow不存在, cron.deny存在,則只有列在cron.deny文件裡面的用戶不能使用crontab命令,其它用戶都能使用。
4、如果兩個文件都存在,則列在cron.allow文件中而且沒有列在cron.deny中的用戶可以使用crontab,如果兩個文件中都有同一個用戶,
以cron.allow文件裡面是否有該用戶為准,如果cron.allow中有該用戶,則可以使用crontab命令。
AIX 中 普通用戶默認都有 crontab 許可權,如果要限制用戶使用 crontab ,就需要編輯/var/adm/cron/cron.deny
HP-UNIX 中默認普通用戶沒得crontab 許可權 ,要想放開普通用戶的crontab 許可權可以編
三、 創建cron腳本
第一步:寫cron腳本文件,命名為crontest.cron。
15,30,45,59 * * * * echo "xgmtest....." >> xgmtest.txt 表示,每隔15分鍾,執行列印一次命令
第二步:添加定時任務。執行命令 「crontab crontest.cron」。搞定
第三步:"crontab -l" 查看定時任務是否成功或者檢測/var/spool/cron下是否生成對應cron腳本
四、 cron服務
cron是一個linux下 的定時執行工具,可以在無需人工干預的情況下運行作業。
/sbin/service crond start //啟動服務
/sbin/service crond stop //關閉服務
/sbin/service crond restart //重啟服務
/sbin/service crond reload //重新載入配置
/sbin/service crond status //查看服務狀態
例如: 使用sudo停止與啟動服務
yanggang@barry$sudo service cron stop
cron stop/waiting
yanggang@barry$ sudo service cron start
cron start/running, process 7502
五、 crontab用法
crontab命令用於安裝、刪除或者列出用於驅動cron後台進程的表格,用戶把需要執行的命令序列放到crontab文件中以獲得執行。
每個用戶都可以有自己的crontab文件,/var/spool/cron下的crontab文件不可以直接創建或者直接修改,該crontab文件是通過crontab -e命令創建的
在crontab文件中如何輸入需要執行的命令和時間,該文件中每行都包括六個域,其中前五個域是指定命令被執行的時間,最後一個域是要被執行的命令。
每個域之間使用空格或者製表符分隔。格式如下:
minute hour day-of-month month-of-year day-of-week commands
合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday)
除了數字還有幾個個特殊的符號就是"*"、"/"與"-"、",",*代表所有的取值范圍內的數字
"/"代表每的意思,"/5"表示每5個單位,"-"代表從某個數字到某個數字,","分開幾個離散的數字。
-l 在標准輸出上顯示當前的crontab。
-r 刪除當前的crontab文件。
-e 使用VISUAL或者EDITOR環境變數所指的編輯器編輯當前的crontab文件。
當結束編輯離開時,編輯後的文件將自動安裝。
幾個例子:
每天早上6點
0 6 * * * echo "Good morning." >> /tmp/test.txt //注意單純echo,從屏幕上看不到任何輸出,因為cron把任何輸出都email到root的信箱了。
每兩個小時
0 */2 * * * echo "Have a break now." >> /tmp/test.txt
晚上11點到早上8點之間每兩個小時和早上八點
0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt
每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點
0 11 4 * 1-3 command line
1月1日早上4點
0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //如果出現錯誤,或者有數據輸出,數據作為郵件發給這個帳號 HOME=/
每小時(第一分鍾)執行/etc/cron.hourly內的腳本
01 * * * * root run-parts /etc/cron.hourly
每天(凌晨4:02)執行/etc/cron.daily內的腳本
02 4 * * * root run-parts /etc/cron.daily
每星期(周日凌晨4:22)執行/etc/cron.weekly內的腳本
22 4 * * 0 root run-parts /etc/cron.weekly
每月(1號凌晨4:42)去執行/etc/cron.monthly內的腳本
42 4 1 * * root run-parts /etc/cron.monthly
注意: "run-parts"這個參數了,如果去掉這個參數的話,後面就可以寫要運行的某個腳本名,而不是文件夾名。
每天的下午4點、5點、6點的5 min、15 min、25 min、35 min、45 min、55 min時執行命令。
5,15,25,35,45,55 16,17,18 * * * command
每周一,三,五的下午3:00系統進入維護狀態,重新啟動系統。
00 15 * *1,3,5 shutdown -r +5
每小時的10分,40分執行用戶目錄下的innd/bbslin這個指令:
10,40 * * * * innd/bbslink
每小時的1分執行用戶目錄下的bin/account這個指令:
1 * * * * bin/account
每天早晨三點二十分執行用戶目錄下如下所示的兩個指令(每個指令以;分隔):
203 * * * (/bin/rm -f expire.ls logins.bad;bin/expire$#@62;expire.1st)
每年的一月和四月,4號到9號的3點12分和3點55分執行/bin/rm -f expire.1st這個指令,並把結果添加在mm.txt這個文件之後(mm.txt文件位於用戶自己的目錄位置)。
12,553 4-91,4 * /bin/rm -f expire.1st$#@62;$#@62;mm.txt
六、幾個問題
crond 進程沒有運行
1. 啟動crond進程
/etc/init.d/crond start
2. 開機自啟動crond進程
chkconfig crond on
crontab 編輯:
輸入編輯命令: crontab -e
# m h dom mon dow command
SHELL=/bin/bash
30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh
Ctrl + O (寫入)——》enter鍵(保存文件名)——》Ctrl + X(退出)
輸入查看命令: crontab -l
# m h dom mon dow command
SHELL=/bin/bash
30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh(建議使用此方式)
語法錯誤:
Syntax error: "(" unexpected
路徑錯誤:
在 /var/spool/crontab/yanggang 中,添加了如下命令,在日誌文件 /var/spool/mail/yanggang 中提示找不到 xxx.sh 路徑
30 * * * * /home/barry/top800/top10/top10_fruits/top10_all.sh
或
30 * * * * bash /home/barry/top800/top10/top10_fruits/top10_all.sh
這是因為在crontab中使用了絕對路徑執行腳本 top10_all.sh,因此在腳本 top10_all.sh 中引用的其它腳本也都需要使用絕對路徑,才能被crontab找到並執行
如何避免絕對路徑復雜的設置呢,如上文 六、幾個問題 所示,採用如下格式:
30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh(建議使用此方式,先進入該目錄,然後在執行腳本;否則,執行腳本中的其它腳本都需要加絕對路徑)
⑵ 如何定時執行某個腳本
腳本如下:
[General]
Description=Test
BeginHotkey=121
BeginHotkeyMod=0
RunOnce=0
Enable=1
[Repeat]
Type=0
Number=1
[Comment]
Content=
[Script]
//RunTime是希望執行腳本的時間,比如晚上0:0:15.TimeNow是系統當前時間.
Dim RunTime,TimeNow,ShowStr
RunTime=CDate("16:18:00")
ShowStr = "您當前設置為" + CStr(RunTime) + "開始運行腳本"
VBSCall Call MessageBox(ShowStr)
//開始判斷時間
Rem CheckTime
TimeNow = CDate(CStr(Hour(Now))+":"+CStr(Minute(Now))+":"+CStr(Second(Now)))
MyVer = DateDiff("s",TimeNow,RunTime)
If MyVer<60
Goto Main
Else
Delay 50000
Goto CheckTime
EndIf
//時間到了,開始執行正式的腳本內容
Rem Main
VBSCall Call MessageBox("時間到了,開始執行腳本!")
⑶ 如何使用Linux的Crontab定時執行PHP腳本的方法
我們先從相對比較復雜的伺服器執行php談起。伺服器上安裝了php,就可以執行php文件,無論是否安裝了nginx或Apache這樣的伺服器環境軟體。而Linux中,使用命令行,用CronTab來定時任務,又是絕佳的選擇,而且也是效率最高的選擇。
首先,進入命令行模式。作為伺服器的linux一般都默認進入命令行模式的,當然,我們管理伺服器也一般通過putty等工具遠程連接到伺服器,為了方便,我們用root用戶登錄。在命令行中鍵入:
crontab -e
之後就會打開一個文件,並且是非編輯狀態,則是vi的編輯界面,通過敲鍵盤上的i,進入編輯模式,就可以編輯內容。這個文件中的每一行就是一個定時任務,我們新建一行,就是新建一條定時任務(當然是指這一行內按照一定的格式進行書寫)。我們現在來舉個例子,增加一行,內容如下:
00 * ** * lynx -mp https://www.yourdomain.com/script.php
這是什麼意思呢?實際上上面這一行由兩部分組成,前面一部分是時間,後面一部分是操作內容。例如上面這個,
00 * ** *
就是指當當前時間的分鍾數為00時,執行該定時任務。時間部分由5個時間參數組成,分別是:
分時日月周
第1列表示分鍾1~59 每分鍾用或者 */1表示,/n表示每n分鍾,例如*/8就是每8分鍾的意思,下面也是類推
第2列表示小時1~23(0表示0點)
第3列表示日期1~31
第4列表示月份1~12
第5列標識號星期0~6(0表示星期天)
整個句子的後面部分就是操作的具體內容。
lynx -mp https://www.yourdomain.com/script.php
意思就是說通過lynx訪問這個url。我們在使用中主要用到lynx、curl、wget來實現對url的遠程訪問,而如果要提高效率,直接用php去執行本地php文件是最佳選擇,例如:
00 */2 * * * /usr/local/bin/php /home/www/script.php
這條語句就可以在每2小時的0分鍾,通過linux內部php環境執行script.php,注意,這里可不是通過url訪問,通過伺服器環境來執行哦,而是直接執行,因為繞過了伺服器環境,所以效率當然要高很多。
好了,已經添加了幾條需要的定時任務了吧。點擊鍵盤上的Esc鍵,輸入「:wq」回車,這樣就保存了設置的定時任務,屏幕上也能看到提示創建了新的定時任務。接下來就是好好寫你的script.php了。
關於CronTab的更多用法這里就不介紹了,如果你想更靈活的使用這個定時任務功能,應該自己再去深入學習一下crontab。
⑷ windows中如何寫一個腳本文件來定時運行
用計劃任務自動運行.BAT批處理文件,在BAT文件中加入>、>>輸出重定向命令
將一條命令或某個程序輸出結果的重定向到特定文件中,
>
與
>>的區別在於,>會清除調原有文件中的內容後寫入指定文件,而>>只會追加內容到指定文件中,而不會改動其中的內容。
比如sqlplus命令或者別的SQL命令後面加入
>>D:\sql.log則將SQL語句執行情況寫到D盤下SQL.log文件下(不覆蓋,追加,可以理解為所有的日誌都在這個文件裡面)
如果後面加
>D:\sql.log
就是覆蓋日誌,只記錄最後一次執行的情況;
明白了嗎,你可以根據自己的需要加上>或者>>就可以啦
⑸ 怎麼用 T-SQL 編寫一個定時任務腳本
SQL Server 2008 定時作業的制定
1.打開【SQL Server Management Studio】,在【對象資源管理器】列表中選擇【SQL Server 代理】;
2.滑鼠右擊【SQL Server 代理】,選擇【啟動(S)】,如已啟動,可以省略此步驟;
3.展開【SQL Server 代理】列表,右擊【作業】>【新建作業】;
3.1 在【常規】選項卡中:
輸入作業名稱,如"My Job";
3.2 在【步驟】選項卡中:
3.2.1 點擊【新建】,輸入【步驟名稱】,如「步驟1」,類型默認T-SQL腳本,也可以選擇SSIS包等;
3.2.2 在【資料庫】一欄選擇要作業處理的資料庫,在【命令】的右邊空白編輯欄輸入要執行的SQL代碼,
你要運行的SQL語句
也可以點擊命令下面的【打開】,打開.sql腳本;
3.2.3 輸入運行腳本後,建議點擊【分析】,確保腳本語法正確,然後點擊下面的【確定】按鈕;
3.3 在【計劃】選項卡中:
3.3.1 點擊【新建】,輸入【計劃名稱】,如「計劃1」,計劃類型默認是」重復執行」,也可以選擇執行一次等;
3.3.2 在【頻率】>【執行】處選擇「每天」、「每周」或「每月」,以「每天」為例,間隔時間輸入間隔幾天執行一次,
你選擇每周執行,執行間隔為1周,在星期一、星期二、星期三、星期四、星期五,執行一次,時間為8:00:003.3.3 在【持續時間】中選擇計劃開始執行的【起始日期】和【截止日期】,然後點擊【確定】按鈕;
注意要將服務設置為自動啟動,否則在重啟伺服器後作業就不運行了。
啟動代理服務的方法:
開始>運行>輸入services.msc>找到【SQL Server 代理】的服務並雙擊>【啟動類型】選擇「自動」>【確定】
至此,定時作業已創建完畢。
⑹ 按鍵精靈腳本如何定時啟動
1、打開按鍵精靈,點擊新建腳本,然後會彈出空白的腳本界面。
⑺ oracle 如何編寫定時腳本
用job,具體用法:
declare
n_job binary_integer;
begin
dbms_job.submit(n_job, '你要執行的東西', sysdate, TRUNC(LAST_DAY(SYSDATE))+4+2/24);
end;
-- 每月4號執行
dbms_job.submit(n_job_01,'你調的東西',sysdate,'TRUNC(LAST_DAY(SYSDATE))+4+2/24');
-- 每分鍾執行一次
dbms_job.submit(n_job_01,'你調的東西',sysdate,'TRUNC(sysdate,』mi』) + 1 / (24*60)');
-- 凌晨兩點執行
dbms_job.submit(n_job_01,'你調的東西',sysdate,'TRUNC(sysdate) + 1 + 2/24');
-- 每周一凌晨2點執行 周一是每周的第二天next_day(sysdate,2)同理周二是第三天,next_day(sysdate,3)
dbms_job.submit(n_job_01,'你調的東西',sysdate,'TRUNC(next_day(sysdate,2))+2/24');
-- 每月1日凌晨兩點執行
dbms_job.submit(n_job_01,'你調的東西',sysdate,'TRUNC(LAST_DAY(SYSDATE))+1+2/24');
-- 每季第一天凌晨兩點執行
dbms_job.submit(n_job_01,'你調的東西',sysdate,'TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24');
-- 每年7月1日和1月1日凌晨2點
dbms_job.submit(n_job_01,'你調的東西',sysdate,'ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24');
-- 每年1月1日凌晨2點執行
dbms_job.submit(n_job_01,'你調的東西',sysdate, 'Add_months(trunc(sysdate,'yyyy'), 12) +2/24');
⑻ windows怎麼定時執行腳本
Win7系統中點擊開始按鈕,依次選擇打開所有程序—附件—系統工具,找到任務計劃程序即可打開Win7系統的任務計劃設置面板。
在Win7系統的任務計劃程序設置面板中,我們點擊菜單操作—創建基本任務。
1、輸入新建任務的名稱和描述,點擊下一步按鈕。
2、在觸發器選項中選擇自己需要的執行頻率,比如是每天、每周、每月還是單次等等,繼續下一步。
3、繼續設置觸發時間詳細選項。繼續點擊下一步。
4、在操作選項中,Win7系統可以讓我們在啟動程序、發送電子郵件、顯示消息中選擇,因為我們需要執行某個批處理文件,所以這里我們選擇啟動程序。繼續點擊下一步。
5、現在進入啟動程序詳細設置,在程序或腳本一欄點擊瀏覽,選擇自己已經寫好的批處理文件。
6、點擊下一步之後,我們可以看見Win7任務計劃會給出當前設置任務的詳細情況,確認無誤後點擊確認按鈕即可完成Win7定時關機的任務計劃設定。
7、現在,我們在Win7系統的任務計劃程序設置面板中可以看到剛才我們設定的定時關機任務,下方按類型列出該任務的詳細信息。右鍵單擊任務,可以從右鍵單擊中對任務進行靈活操作,比如運行、結束、禁用、導出、屬性、刪除等等,非常方便。
⑼ 定時執行一個sh腳本怎麼寫
linux下使用crontab命令被用來提交和管理用戶的需要周期性執行的任務,示例如下:
crontab -e 編輯周期任務
30 21 * * * /etc/init.d/smb restart 每晚的21:30重啟smb
crontab命令說明:
crontab命令被用來提交和管理用戶的需要周期性執行的任務,與windows下的計劃任務類似,當安裝完成操作系統後,默認會安裝此服務工具,並且會自動啟動crond進程,crond進程每分鍾會定期檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。
語法
crontab(選項)(參數)
選項
-e:編輯該用戶的計時器設置;
-l:列出該用戶的計時器設置;
-r:刪除該用戶的計時器設置;
-u<用戶名稱>:指定要設定計時器的用戶名稱。
參數
crontab文件:指定包含待執行任務的crontab文件。
知識擴展
Linux下的任務調度分為兩類:系統任務調度和用戶任務調度。
系統任務調度:系統周期性所要執行的工作,比如寫緩存數據到硬碟、日誌清理等。在/etc目錄下有一個crontab文件,這個就是系統任務調度的配置文件。
⑽ 按鍵精靈如何定時啟動腳本
按鍵精靈定時啟動腳本操作如下:
1、打開鍵盤向導,單擊新腳本,會彈出一個空白的腳本屏幕。