解析crontab php自動執行的方法

2022-10-06 13:03:14 字數 3154 閱讀 7383

crontab是linux自帶的乙個命令 

使php自動執行的方法

php自動執行有很多方法,這裡分以下dz以及一些通過系統完成的方法和直接觸發執行駐留系統的方法。

discuz後台有個計畫任務,可以使php自動執行。

dz計畫任務的機制是這樣:

1.首先在到了觸發計畫任務的時間,有訪問(會員,遊客,搜尋引擎的蜘蛛)然後觸發該計畫任務發生。(因為php是觸發是語言,沒有人去訪問他,他什麼也做不了。)

2. 計畫任務執行.

3. 執行成功,返回執行成功的資訊,更新到資料庫中記錄當前執行的時間,下一次需要執行的時間。

目前讓php自動執行的的方法有以下幾種方法:

1:在windows下用計畫任務

在linux下用crantab

缺點:必須具有伺服器許可權

2:用個某個網頁隔一段時間去重新整理,比如用js或者php程式來實現。

缺點:必須用某個工具將該頁開著。

3:在有使用者訪問的時候觸發

缺點:必須在使用者訪問的頁面裡包含觸發程式。

用crontab定時執行

是 unix的乙個命令

crontab-操作每個使用者的守護程式和該執行的時間表。

具體的部分引數說明如下:

crontab file [-u user]-用指定的檔案替代目前的crontab。

crontab-[-u user]-用標準輸入替代目前的crontab.

crontab-1[user]-列出使用者目前的crontab.

crontab-e[user]-編輯使用者目前的crontab.

crontab-d[user]-刪除使用者目前的crontab.

crontab-c dir- 指定crontab的目錄。

crontab檔案的格式:m h d m d cmd.

m: 分鐘(0-59)。

h:小時(0-23)。

d:天(1-31)。

m: 月(1-12)。

d: 一星期內的天(0~6,0為星期天)。

cmd要執行的程式,程式被送入sh執行,這個shell只有user,home,shell這三個環境變數。

下面是乙個例子檔案:

複製** **如下:

#min hour day month dayofweek command

#每天早上6點

106* * * date

#每兩個小時

0*/2* * * date

#晚上11點到早上8點之間每兩個小時,早上部點

0 23-7/2,8* * * date

#每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點

0 11 4* mon-wed date

#1月份日早上4點

0 4 1 jan* date

範例 複製** **如下:

lark:~>crontab-1 列出使用者目前的crontab.

#min hour day month dayofweek command

10 6* * * date

0*/2* * * date

0 23-7/2,8 * * * date

在linux,有多種方式可以實現定時執行,使用最靈活的應該是crontab, 在使用crontab必須特別注意環境變數問題,在此以執行oracle的sqlplus為例, 說明cronta的使用方法。

1:crontab 使用方法:crontab [ -e | -l | -r ] 檔名 -e:編輯任務 -l:顯示任務資訊 -r:刪除定時執行任務資訊

2:crontab中處理的檔案格式為 分鐘 小時 日期 月 星期 執行的檔名 *代表所ssmekgpw有條件 5 * * * *rem /home/oracle/execsql 代表每個小時的5分鐘時執行/home/oracle/execsql檔案

3:對於sql等需要在特定的環境變數下執行的命令,在執行檔案中必須列出。如在oracle下執行sqlplus,必須按以下格式編寫: $ cat execsql oracle_home=/ora815;export 程式設計客棧oracle_home oracle_owner=oracle;export oracle_owner oracle_sid=ora815;export oracle_sid oracle_base=/ora815/app/oralce;export oracle_base ld_library_path=$oracle_home/lib;export ld_library_path path=$path:$oracle_home/bin:$ld_library_path;export path nls_lang=american_america.zhs16cgb231280;export nls_lang /ora815/bin/sqlplus test1/test1 @test1.ext (執行@test1.ext檔案,資料庫的使用者名稱/密碼為test1/test1)

其中要求execsql為可執行的程式 $ lswww.cppcns.com -al execsql -rwxr-xr-x 1 oracle dba 374 oct 07 15:17 execsql

使用crontab,使php程式在12:00執行

就按照下面的格式改一下,加在crontab就行了

00 0 * * * cd /你的程式路徑;php 你的程式名字.php

這個需要編譯的時候有cli或者cgi模式的php.

另外:若無管理許可權,只有虛擬空間

php裡有個函式很有用。這是在最近的開發中才逐漸用到的。 int ignore_user_abort ( [bool setting] ) 這個函式的作用是指示伺服器端在遠端客戶端關閉連線後是否繼續執行下面的指令碼。 setting 引數是乙個可選引數。如設定為true,則表示如果使用者停止指令碼執行,仍然不影程式設計客棧響指令碼的執行(即:指令碼將持續執行);如果設定為false,則表示當使用者停止執行指令碼程式時,指令碼程式將停止執行。 下面這個例子,在使用者關閉瀏覽器後,該指令碼仍然後在伺服器上繼續執行:

複製** **如下:

ignore_user_abort(); // 後台執行

set_time_limit(0); // 取消指令碼執行時間的超時上限

dowhile(true);

除非在伺服器上關閉這個程式,否則這斷**將永遠執行下去。

本文標題: 解析crontab php自動執行的方法

本文位址:

自動化運維ansible解析

name version capacity centos 7 3.10.0 693.el7.x86 64 1 smp tue aug 22 21 09 27 utc 2017 x86 64 x86 64 x86 64 gnu linux ansible 不需要安裝客戶端,通過sshd去通訊 基於模組...

linux運維網路解析

網路應用程式 web 瀏覽器 chrome ie firefox等 即時訊息 qq 微信 釘釘等 電子郵件 outlook foxmail 等 協作 會議 vnc netmeeting webex 等 web網路服務 apache,nginx,iis 檔案網路服務 ftp,nfs,samba 資料庫...

運維自動化

1,cobbler安裝環境準備 安裝epel epel release 6 8.noarch.rpm x86 64 epel release 6 8.noarch.rpm x86 安裝系列依賴環境 要是區域網用,建議關閉iptables 或是放行25151 80 69埠 和關閉selinux 檢視狀...