国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - php守護進程 加linux命令nohup實現(xiàn)任務每秒執(zhí)行一次

php守護進程 加linux命令nohup實現(xiàn)任務每秒執(zhí)行一次

2019-12-04 11:12PHP教程網(wǎng) PHP教程

那么有了這個命令以后我們php就寫成shell 腳本使用循環(huán)來讓我們腳本一直運行下去,不管我們終端窗口是否關閉都能夠讓我們php 腳本一直運行下去。

Unix中 nohup 命令功能就是不掛斷地運行命令,同時 nohup 把程序的所有輸出到放到當前目錄 nohup.out 文件中,如果文件不可寫,則放到 <用戶主目錄>/nohup.out 文件中。那么有了這個命令以后我們php就寫成shell 腳本使用循環(huán)來讓我們腳本一直運行下去,不管我們終端窗口是否關閉都能夠讓我們php 腳本一直運行下去。 
馬上動手寫個 PHP 小程序,功能為每30秒記錄時間,寫入到文件 

復制代碼代碼如下:


# vi for_ever.php 
#! /usr/local/php/bin/php 
define('ROOT', dirname(__FILE__).'/'); 
set_time_limit(0); 
while (true) { 
file_put_contents(ROOT.'for_ever.txt', date('Y-m-d H:i:s')."\n", FILE_APPEND); 
echo date('Y-m-d H:i:s'), ' OK!'; 
sleep(30); 

?> 


保存退出,然后賦予 for_ever.php 文件可執(zhí)行權限: 
# chmod +x for_ever.php 
讓它在再后臺執(zhí)行: 
# nohup /home/andy/for_ever.php.php & 
記得最后加上 & 符號,這樣才能夠跑到后臺去運行 
執(zhí)行上述命令后出現(xiàn)如下提示: 
[1] 5157 
nohup: appending output to 'nohup.out' 
所有命令執(zhí)行輸出信息都會放到 nohup.out 文件中 
這時你可以打開 for_ever.php 同目錄下的 for_ever.txt 和 nohup.out 看看效果! 
好了,它會永遠運行下去了,怎么結束它呢? 
# ps 
PID TTY TIME CMD 
4247 pts/1 00:00:00 bash 
5157 pts/1 00:00:00 for_ever.php 
5265 pts/1 00:00:00 ps 
# kill -9 5157 
找到進程號 5157 殺之,你將看到 
[1]+ Killed nohup /home/andy/for_ever.php 
OK! 
==================== 
在很多項目中,或許有很多類似的后端腳本需要通過crontab定時執(zhí)行。比如每10秒檢查一下用戶狀態(tài)。腳本如下: 
@file: /php_scripts/scan_userstatus.php 

復制代碼代碼如下:


#!/usr/bin/env php -q 
$status = has_goaway(); 
if ($status) { 
//done 

?> 


通過crontab定時執(zhí)行腳本scan_userstatus.php 
#echo “*:*/10 * * * * /php_scripts/scan_userstatus.php” 
這樣,每隔10秒鐘,就會執(zhí)行該腳本。 
我們發(fā)現(xiàn),在短時間內,該腳本的內存資源還沒有釋放完,又啟用了新的腳本。也就是說:新腳本啟動了,舊腳本占用的資源還沒有如愿釋放。如此,日積月累,浪費了很多內存資源。我們對這個腳本進行了一下改進,改進后如下: 
@file: /php_scripts/scan_userstatus.php 

復制代碼代碼如下:


#/usr/bin/env php -q 
while (1) { 
$status = has_goaway(); 
if ($status) { 
//done 

usleep(10000000); 

?> 


這樣,不需要crontab了。可以通過以下命令執(zhí)行腳本,達到相同的功能效果 
#chmod +x /php_scripts/scan_userstatus.php 
#nohup /php_scripts/scan_userstatus.php & 
在這里,我們通過&將腳本放到后臺運行,為了防止隨著終端會話窗口關閉進程被殺,我們使用了nohup命令。那么有沒有辦法,不使nohup命令,也能夠運行呢,就像Unin/Linux Daemon一樣。接下來,就是我們要講的守護進程函數(shù)。 
什么是守護進程?一個守護進程通常補認為是一個不對終端進行控制的后臺任務。它有三個很顯著的特征:在后臺運行,與啟動他的進程脫離,無須控制終端。常用的實現(xiàn)方式是fork() -> setsid() -> fork() 詳細如下: 
@file: /php_scripts/scan_userstatus.php 

復制代碼代碼如下:


#/usr/bin/env php -q 
daemonize(); 
while (1) { 
$status = has_goaway(); 
if ($status) { 
//done 

usleep(10000000); 

function daemonize() { 
$pid = pcntl_fork(); 
if ($pid === -1 ) { 
return FALSE; 
} else if ($pid) { 
usleep(500); 
exit(); //exit parent 

chdir("/"); 
umask(0); 
$sid = posix_setsid(); 
if (!$sid) { 
return FALSE; 

$pid = pcntl_fork(); 
if ($pid === -1) { 
return FALSE; 
} else if ($pid) { 
usleep(500); 
exit(0); 

if (defined('STDIN')) { 
fclose(STDIN); 

if (defined('STDOUT')){ 
fclose(STDOUT); 

if (defined('STDERR')) { 
fclose(STDERR); 


?> 


實現(xiàn)了守護進程函數(shù)以后,則可以建立一個常駐進程,所以只需要執(zhí)行一次: 
#/php_scripts/scan_userstatus.php 
這里較為關鍵的二個php函數(shù)是pcntl_fork()和posix_setsid()。fork()一個進程,則表示創(chuàng)建了一個運行進程的副本,副本被認為是子進程,而原始進程被認為是父進程。當fork()運行之后,則可以脫離啟動他的進程與終端控制等,也意味著父進程可以自由退出。 pcntl_fork()返回值,-1表示執(zhí)行失敗,0表示在子進程中,而返進程ID號,則表示在父進程中。在這里,退出父進程。setsid(),它首先使新進程成為一個新會話的“領導者”,最后使該進程不再控制終端,這也是成為守護進程最關鍵的一步,這意味著,不會隨著終端關閉而強制退出進程。對于一個不會被中斷的常駐進程來說,這是很關鍵的一步。進行最后一次fork(),這一步不是必須的,但通常都這么做,它最大的意義是防止獲得控制終端。(在直接打開一個終端設備,而且沒有使用O_NOCTTY標志的情況下, 會獲得控制終端). 
其它事項說明: 
1) chdir() 將守護進程放到總是存在的目錄中,另外一個好處是,你的常駐進程不會限制你umount一個文件系統(tǒng)。 
2)umask() 設置文件模式,創(chuàng)建掩碼到最大的允許限度。如果一個守護進程需要創(chuàng)建具有可讀,可寫權限的文件,一個被繼承的具有更嚴格權限的掩碼會有反作用。 
3)fclose(STDIN), fclose(STDOUT), fclose(STDERR) 關閉標準I/O流。注意,如果有輸出(echo),則守護進程會失敗。所以通常將STDIN, STDOUT, STDERR重定向某個指定文件.

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 欧美日韩在线视频观看 | 在线视频a| 一级a性色生活片毛片 | 一本综合久久 | 久久久精品网站 | 国产成人精品综合 | 偷拍一区二区三区 | 在线日韩| 日韩免费视频 | 国产日韩精品一区 | 精品美女久久 | 午夜久久久久 | 一级欧美 | 欧美日本免费一区二区三区 | 国产伦精品一区二区三区高清 | 国产精品不卡一区二区三区 | 中文字幕精品一区 | 精品亚洲永久免费精品 | 黄色国产在线看 | www.色94色.com| 成年人视频免费在线看 | 免费成人激情视频 | 日韩一区免费在线观看 | 国产欧美日韩一区二区三区 | 国产精品一区二区三区在线播放 | 免费看一区二区三区 | 日韩av免费在线观看 | 97高清国语自产拍 | 日韩一区二区在线观看 | 国产午夜久久 | 亚洲综合区 | 精久久| 亚洲视频免费 | 97国产精品| 亚洲欧美激情精品一区二区 | 亚洲激情av | 国产黄色播放 | 中文字幕日韩欧美一区二区三区 | 欧美午夜一区 | 亚洲免费成人 | 亚洲精品毛片一区二区 |