亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

php守護進程 加linux命令nohup實現任務每秒執行一次

2024-05-04 23:17:44
字體:
來源:轉載
供稿:網友
Unix中 nohup 命令功能就是不掛斷地運行命令,同時 nohup 把程序的所有輸出到放到當前目錄 nohup.out 文件中,如果文件不可寫,則放到 <用戶主目錄>/nohup.out 文件中。那么有了這個命令以后我們php就寫成shell 腳本使用循環來讓我們腳本一直運行下去,不管我們終端窗口是否關閉都能夠讓我們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 文件可執行權限:
# chmod +x for_ever.php
讓它在再后臺執行:
# nohup /home/andy/for_ever.php.php &
記得最后加上 & 符號,這樣才能夠跑到后臺去運行
執行上述命令后出現如下提示:
[1] 5157
nohup: appending output to 'nohup.out'
所有命令執行輸出信息都會放到 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定時執行。比如每10秒檢查一下用戶狀態。腳本如下:
@file: /php_scripts/scan_userstatus.php

復制代碼 代碼如下:


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


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

復制代碼 代碼如下:


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


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


實現了守護進程函數以后,則可以建立一個常駐進程,所以只需要執行一次:
#/php_scripts/scan_userstatus.php
這里較為關鍵的二個php函數是pcntl_fork()和posix_setsid()。fork()一個進程,則表示創建了一個運行進程的副本,副本被認為是子進程,而原始進程被認為是父進程。當fork()運行之后,則可以脫離啟動他的進程與終端控制等,也意味著父進程可以自由退出。 pcntl_fork()返回值,-1表示執行失敗,0表示在子進程中,而返進程ID號,則表示在父進程中。在這里,退出父進程。setsid(),它首先使新進程成為一個新會話的“領導者”,最后使該進程不再控制終端,這也是成為守護進程最關鍵的一步,這意味著,不會隨著終端關閉而強制退出進程。對于一個不會被中斷的常駐進程來說,這是很關鍵的一步。進行最后一次fork(),這一步不是必須的,但通常都這么做,它最大的意義是防止獲得控制終端。(在直接打開一個終端設備,而且沒有使用O_NOCTTY標志的情況下, 會獲得控制終端).
其它事項說明:
1) chdir() 將守護進程放到總是存在的目錄中,另外一個好處是,你的常駐進程不會限制你umount一個文件系統。
2)umask() 設置文件模式,創建掩碼到最大的允許限度。如果一個守護進程需要創建具有可讀,可寫權限的文件,一個被繼承的具有更嚴格權限的掩碼會有反作用。
3)fclose(STDIN), fclose(STDOUT), fclose(STDERR) 關閉標準I/O流。注意,如果有輸出(echo),則守護進程會失敗。所以通常將STDIN, STDOUT, STDERR重定向某個指定文件.
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品九九久久久久久久| 亚洲激情在线观看| 欧美性69xxxx肥| 日本午夜人人精品| 精品中文字幕久久久久久| 国产精品高潮在线| 欧美老少配视频| 亚洲欧美日韩一区二区三区在线| 国产拍精品一二三| 亚洲男人天堂久| 久久99久久亚洲国产| 亚洲男人天天操| 亚洲欧洲av一区二区| 亚洲国产精品热久久| yw.139尤物在线精品视频| 亚洲第一区第一页| 日本一区二区三区四区视频| 亚洲国产成人精品电影| 亚洲91精品在线观看| 麻豆成人在线看| 久久久精品美女| 久久亚洲春色中文字幕| 欧美老女人www| 综合国产在线视频| www国产精品视频| 国产精品海角社区在线观看| 国产精品男人的天堂| 精品福利樱桃av导航| 中文字幕精品一区二区精品| 日韩欧美国产高清91| 日本成人在线视频网址| 日本精品视频网站| 国产成人午夜视频网址| 日韩国产一区三区| 欧美日韩一区二区三区| 精品人伦一区二区三区蜜桃免费| 国产精品免费久久久| 亚洲一区二区三区成人在线视频精品| 成人妇女免费播放久久久| 热久久这里只有精品| 久久精品国亚洲| 久久久噜久噜久久综合| 欧美电影在线播放| 在线视频欧美日韩| 日韩在线播放一区| 欧美网站在线观看| 91国内精品久久| 成人黄色免费在线观看| 91精品国产高清久久久久久久久| 国产精品久久电影观看| 亚洲免费福利视频| 日韩欧美主播在线| 欧美在线视频一二三| 成人午夜在线观看| 亚洲国产精彩中文乱码av在线播放| 日韩中文字幕网站| 日韩欧亚中文在线| 亚洲欧洲日产国产网站| 国产综合久久久久| 亚洲区bt下载| 日韩小视频在线| 国产日韩在线免费| 国产在线精品成人一区二区三区| 亚洲精品www久久久久久广东| 国产丝袜一区二区三区| 久久久久久久国产精品| 国产精品丝袜高跟| 91久久精品日日躁夜夜躁国产| 亚洲视频免费一区| 国产精品成人av性教育| 欧美激情乱人伦一区| 欧美激情视频给我| 狠狠色狠狠色综合日日五| 91九色在线视频| 日韩欧美中文在线| 亚洲精品v欧美精品v日韩精品| 日本中文字幕不卡免费| 久久亚洲精品视频| 精品国产福利在线| 欧洲成人在线观看| 欧美高清在线视频观看不卡| 久久久久久伊人| 日韩精品www| 亚洲美女精品成人在线视频| 51久久精品夜色国产麻豆| 亚洲国产精彩中文乱码av在线播放| 日韩av电影在线网| 欧美日韩在线视频一区| 亚洲最大av在线| 精品亚洲一区二区三区四区五区| 成人免费自拍视频| 国产日韩欧美另类| 成人天堂噜噜噜| 国产成人精品免费视频| 91精品在线观看视频| 欧洲精品久久久| 亚洲综合av影视| 国产精品尤物福利片在线观看| 欧美日韩亚洲高清| 欧美成人精品在线视频| 国产精品手机播放| 亚洲第一级黄色片| 欧美国产亚洲视频| 国产最新精品视频| 久久久久久国产| 亚洲欧美日韩中文视频| 狠狠色噜噜狠狠狠狠97| 狠狠色狠色综合曰曰| 亚洲奶大毛多的老太婆| 国产精品美乳在线观看| 亚洲精品av在线| …久久精品99久久香蕉国产| 国产亚洲精品美女久久久| 精品亚洲夜色av98在线观看| 国产精品美腿一区在线看| 亚洲精选中文字幕| 成人网在线免费观看| 久久亚洲精品小早川怜子66| 亚洲欧美日韩国产成人| 国产精品嫩草视频| 日韩av电影国产| 一区二区三区日韩在线| 日本免费一区二区三区视频观看| 日韩精品中文字幕久久臀| 日韩av在线最新| 日韩高清电影免费观看完整版| 亚洲男女自偷自拍图片另类| 欧美精品成人91久久久久久久| 久久久国产精品一区| 日韩在线视频网| 欧美性猛交xxxx富婆| 91亚洲精品一区| 亚洲图片欧洲图片av| 日韩激情av在线免费观看| 欧美国产激情18| 久久久精品欧美| 日韩在线中文字| 九九九久久国产免费| 欧美日韩国产一区二区| 海角国产乱辈乱精品视频| 日韩精品中文在线观看| 国产精品丝袜久久久久久不卡| 欧美在线精品免播放器视频| 亚洲自拍高清视频网站| 国产主播在线一区| 亚洲精品第一页| 国产91色在线播放| 久久久久久久色| 伊人久久免费视频| 啊v视频在线一区二区三区| 91免费看视频.| 美日韩精品免费视频| 欧美激情网友自拍| 另类图片亚洲另类| 国产精品久久久久免费a∨| 91精品国产91久久久久| 日本高清久久天堂| 国产福利成人在线| 久久久999精品| 国产精品极品美女粉嫩高清在线| 欧美在线一级视频| 国产一区二区三区免费视频| 久久久久久中文字幕| 久久久国产精彩视频美女艺术照福利|