Ví dụ daemon PHP

Sau đây là hướng dẫn tạo PHP scripted daemon. Tất cả các ví dụ sẽ được thực hiện trên CentOS linux. Bản thân mã daemon sẽ được viết bằng PHP với trình bao bọc tập lệnh BASH

Bắt đầu

Vì vậy, để bắt đầu, hãy tạo một tệp PHP đơn giản sẽ được thực thi dưới dạng trình nền của chúng tôi. Về cơ bản, chúng tôi sẽ tạo tệp PHP dòng lệnh mill hàng ngày của bạn. Sau đó, chúng tôi sẽ lo lắng về việc biến thành yêu tinh một lát sau. Đối với ví dụ này, hãy tạo một tập lệnh PHP đơn giản để đưa văn bản vào tệp nhật ký mỗi giây. Vì vậy, hãy tạo một tệp có tên “Daemon. php” và hãy đặt phần sau vào đó

[cú pháp mã lang=”php”]

#!/usr/bin/php

[/codesyntax]

Ok, điều đó không tệ lắm. Dòng đầu tiên cho trình thông dịch biết phải thực thi tệp dựa trên cái gì, trong trường hợp này, chúng tôi muốn tệp được hiểu là PHP. Tiếp theo, chúng ta tạo một vòng lặp vô hạn đơn giản ghi “Running…” vào “/var/log/Daemon. log”, sau đó ngủ trong giây lát. Bây giờ hãy kiểm tra nó, nhưng trước tiên chúng ta cần làm cho nó có thể thực thi được

chmod a+x Daemon.php

Bây giờ hãy kiểm tra nó

./Daemon.php

Bây giờ tập lệnh đang chạy, hãy kiểm tra tệp nhật ký. Mở một thiết bị đầu cuối mới và đưa ra lệnh sau để xác minh đầu ra

tail -f /var/log/Daemon.log

Nếu mọi việc suôn sẻ, bạn sẽ thấy các bản cập nhật trực tiếp có nội dung “Đang chạy…Đang chạy…Đang chạy…”

Bây giờ, hãy nâng cao kịch bản một chút để làm cho nó thân thiện hơn với người dùng. Hãy thêm khả năng chuyển đối số dòng lệnh và hiển thị thông báo trợ giúp

[cú pháp mã lang=”php”]

#!/usr/bin/php

 The location of the log file (default '$log')n";
    echo "n";
}//end displayUsage()

//configure command line arguments
if($argc > 0){
    foreach($argv as $arg){
        $args = explode('=',$arg);
        switch($args[0]){
            case '--help':
                return displayUsage();
            case '--log':
                $log = $args[1];
                break;
        }//end switch
    }//end foreach
}//end if

//the main process
while(true){
	file_put_contents($log, 'Running...', FILE_APPEND);
	sleep(1);
}//end while

?>

[/codesyntax]

Vì vậy, bây giờ chúng tôi có một cách hay để chuyển các đối số hoặc tùy chọn dòng lệnh cho quy trình trình nền của chúng tôi cùng với chức năng sử dụng hiển thị đẹp mắt mà bạn có thể sử dụng để gắn thương hiệu cho quy trình của mình bằng thông tin tác giả, v.v. Bây giờ tất cả đều ổn và bảnh bao, nhưng điều đó có liên quan gì đến việc tạo một daemon PHP? . Chuyển các cờ dòng lệnh một cách dễ dàng và thanh lịch sẽ có trong tay sau khi chúng tôi thiết lập và chạy trình nền của mình. Vì vậy, bây giờ chúng ta có một quy trình daemon cơ bản, hãy thực sự làm cho nó hoạt động như một daemon. Để làm điều này, chúng tôi sẽ cần một trình khởi chạy daemon BASH và cuối cùng chúng tôi sẽ cần đặt nó trong thư mục “/etc/init. thư mục d”. Vì vậy, bây giờ bộ điều khiển daemon BASH

Bộ điều khiển BASH Daemon

Hãy bắt đầu bằng cách tạo một tệp có tên là “Daemon” mà chúng ta sẽ sử dụng để kiểm soát “Daemon” của mình. tập tin php”. Vì vậy, trước tiên tôi sẽ cung cấp cho bạn toàn bộ tập lệnh BASH, sau đó tôi sẽ giải thích về nó

[cú pháp mã lang=”bash”]

#!/bin/bash
#
#	/etc/init.d/Daemon
#
# Starts the at daemon
#
# chkconfig: 345 95 5
# description: Runs the demonstration daemon.
# processname: Daemon

# Source function library.
. /etc/init.d/functions

#startup values
log=/var/log/Daemon.log

#verify that the executable exists
test -x /home/godlikemouse/Daemon.php || exit 0RETVAL=0

#
#	Set prog, proc and bin variables.
#
prog="Daemon"
proc=/var/lock/subsys/Daemon
bin=/home/godlikemouse/Daemon.php

start() {
	# Check if Daemon is already running
	if [ ! -f $proc ]; then
	    echo -n $"Starting $prog: "
	    daemon $bin --log=$log
	    RETVAL=$?
	    [ $RETVAL -eq 0 ] && touch $proc
	    echo
	fi

	return $RETVAL
}

stop() {
	echo -n $"Stopping $prog: "
	killproc $bin
	RETVAL=$?
	[ $RETVAL -eq 0 ] && rm -f $proc
	echo
        return $RETVAL
}

restart() {
	stop
	start
}	

reload() {
	restart
}	

status_at() {
 	status $bin
}

case "$1" in
start)
	start
	;;
stop)
	stop
	;;
reload|restart)
	restart
	;;
condrestart)
        if [ -f $proc ]; then
            restart
        fi
        ;;
status)
	status_at
	;;
*)

echo $"Usage: $0 {start|stop|restart|condrestart|status}"
	exit 1
esac

exit $?
exit $RETVAL

[/codesyntax]

Ok, vậy tập lệnh BASH ở trên là trình điều khiển daemon chịu trách nhiệm khởi động, dừng, khởi động lại, v.v. Ban đầu, nó tự thiết lập để sử dụng với chkconfig để có thể thiết lập khởi động khi hệ điều hành khởi động, v.v. Tiếp theo, nó bao gồm các hàm BASH cơ bản bao gồm tệp. Sau đó, chúng tôi kiểm tra xem tệp thực thi có thực sự tồn tại hay không trước khi chúng tôi thử và khởi động nó. Tiếp theo, chúng tôi thiết lập các biến mặc định cho chương trình của mình bao gồm tên tệp proc, bin hoặc tệp thực thi và tên chương trình. Tiếp theo, chúng ta định nghĩa một số tham số mặc định cơ bản để truyền vào file PHP khi khởi động. Bạn cũng có thể sửa đổi tập lệnh này để đọc các biến từ tệp cấu hình “/etc/Daemon”, nhưng hiện tại chúng tôi sẽ chỉ đặt chúng trực tiếp trong tệp BASH. Cuối cùng, tệp PHP được gọi cùng với lệnh daemon. Phần còn lại của tệp đơn giản đọc đầu vào của người dùng vào tệp BASH và xử lý bắt đầu, khởi động lại, v.v. Tiếp theo, hãy làm cho tệp BASH Daemon có thể thực thi được để chúng tôi có thể sử dụng nó chỉ trong giây lát

chmod a+x Daemon

Trình nền PHP

Vì vậy, bây giờ chúng tôi có bộ điều khiển của mình, chúng tôi sẽ cần sửa đổi tập lệnh PHP của mình để hoạt động trong quy trình daemon. Để PHP của chúng tôi hoạt động trong quy trình daemon, chúng tôi sẽ cần sử dụng fork, theo cách đó chúng tôi có thể thiết lập một quy trình con sẽ liên tục chạy và trả về một giá trị cho bộ điều khiển của chúng tôi để cho nó biết rằng chúng tôi có thể bắt đầu đúng cách. Đây là sửa đổi đối với tệp PHP

[cú pháp mã lang=”php”]

#!/usr/bin/php

 The location of the log file (default '$log')n";
    echo "n";
}//end displayUsage()

//configure command line arguments
if($argc > 0){
    foreach($argv as $arg){
        $args = explode('=',$arg);
        switch($args[0]){
            case '--help':
                return displayUsage();
            case '--log':
                $log = $args[1];
                break;
        }//end switch
    }//end foreach
}//end if

//fork the process to work in a daemonized environment
file_put_contents($log, "Status: starting up.n", FILE_APPEND);
$pid = pcntl_fork();
if($pid == -1){
	file_put_contents($log, "Error: could not daemonize process.n", FILE_APPEND);
	return 1; //error
}
else if($pid){
	return 0; //success
}
else{
    //the main process
    while(true){
        file_put_contents($log, 'Running...', FILE_APPEND);
        sleep(1);
    }//end while
}//end if

?>

[/codesyntax]

Bạn sẽ nhận thấy rằng tôi đã thêm một số lệnh gọi khác vào file_put_contents() chỉ để cho chúng tôi biết chúng tôi đang làm như thế nào. Bây giờ, đối với nội dung chính của hoạt động, chúng tôi gọi pcntl_fork() để tạo một tiến trình con và để cho trình gọi cha trả lại một giá trị cho bộ điều khiển daemon BASH. If đầu tiên xác định xem cuộc gọi ngã ba có hoạt động hay không, nếu nó trả về -1, thì đó là lỗi, báo cáo lỗi và trả lại trạng thái không thành công cho bộ điều khiển daemon BASH. Nếu $pid chứa một số hợp lệ, thì chúng tôi đã sẵn sàng, nhưng chúng tôi vẫn đang trong quy trình gốc, vì vậy chúng tôi trả về 0 để cho bộ điều khiển daemon BASH biết rằng tất cả đều ổn trong vũ trụ. Cái khác thực thi khi tiến trình con được tạo và đây là nơi phần chính của chương trình của chúng tôi thực thi

Bây giờ, nếu mọi việc suôn sẻ, chúng ta có thể khởi động daemon theo kiểu daemon bình thường. Nếu bạn đang chạy cái này trong thư mục /home/{username} thì hãy thực hiện như sau

________số 8

Bạn cũng có thể sao chép tập lệnh Daemon BASH vào thư mục “/etc/init. d/”, trong trường hợp đó bạn có thể khởi động daemon bằng lệnh “service”

service Daemon start

Stopping Daemon:              [ OK ]

Bây giờ để xác minh rằng mọi thứ đang hoạt động chính xác. Trước tiên hãy kiểm tra tệp nhật ký

tail -f /var/log/Daemon.log

Trạng thái. khởi động.
Đang chạy...Đang chạy...Đang chạy...

Vâng, tất cả đều tốt ở đó. Bây giờ hãy kiểm tra quy trình của chúng tôi

chmod a+x Daemon.php
1

Ok, quá trình đang chạy chính xác. Bây giờ, hãy dừng nó lại và xác minh lại. Ban hành lệnh sau

chmod a+x Daemon.php
2

hoặc nếu bạn đã sao chép bộ điều khiển vào “/etc/init. thư mục d”

chmod a+x Daemon.php
3

Bây giờ, hãy xác minh rằng quy trình của chúng tôi đã dừng

chmod a+x Daemon.php
4

Vâng, tất cả đều tốt...và bạn đã có nó. Bây giờ bạn có thể viết trình nền PHP cho đến khi bạn chuyển sang màu xanh và bất tỉnh. Hy vọng hướng dẫn này hữu ích, chúc may mắn

Trình nền PHP là gì?

Daemon là chương trình Linux chạy ngầm, giống như một 'Dịch vụ' trên Windows . Nó có thể thực hiện tất cả các loại tác vụ không yêu cầu người dùng nhập trực tiếp. Apache là một daemon, MySQL cũng vậy. Tất cả những gì bạn từng nghe từ họ đều được tìm thấy ở đâu đó trong /var/log , nhưng họ vẫn âm thầm cung cấp năng lượng cho hơn 40% Internet.

Làm cách nào để chạy PHP trong CMD?

Bạn chỉ cần làm theo các bước để chạy chương trình PHP bằng dòng lệnh. .
Mở terminal hoặc cửa sổ dòng lệnh
Chuyển đến thư mục hoặc thư mục được chỉ định chứa các tệp php
Sau đó, chúng ta có thể chạy mã php bằng lệnh sau. tên_tệp php. php

Sự khác biệt giữa daemon và dịch vụ là gì?

Từ daemon để biểu thị một chương trình nền là từ văn hóa Unix; . Dịch vụ là một chương trình đáp ứng các yêu cầu từ các chương trình khác thông qua một số cơ chế giao tiếp giữa các quá trình (thường là qua mạng) . Một dịch vụ là những gì một máy chủ cung cấp.

Ví dụ về daemon trong Linux là gì?

Ví dụ: trên Linux, trình nền Giao thức thời gian mạng (NTP) được sử dụng để đo chênh lệch thời gian giữa đồng hồ trên máy tính đó. . Một daemon thời gian chạy trên mỗi máy chủ, với một máy được chỉ định là chính và tất cả các máy khác là phụ.