नई के साथ systemd आप एक सेवा बना सकते हैं।
आप एक फ़ाइल या एक बनाना होगा सिमलिंक में /etc/systemd/system/
, उदाहरण के लिए। myphpdaemon.service और इस तरह की जगह सामग्री, myphpdaemon सेवा का नाम होगा:
[Unit]
Description=My PHP Daemon Service
#May your script needs MySQL or other services to run, eg. MySQL Memcached
Requires=mysqld.service memcached.service
After=mysqld.service memcached.service
[Service]
User=root
Type=simple
TimeoutSec=0
PIDFile=/var/run/myphpdaemon.pid
ExecStart=/usr/bin/php -f /srv/www/myphpdaemon.php arg1 arg2> /dev/null 2>/dev/null
#ExecStop=/bin/kill -HUP $MAINPID #It's the default you can change whats happens on stop command
#ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
StandardOutput=null #If you don't want to make toms of logs you can set it null if you sent a file or some other options it will send all php output to this one.
StandardError=/var/log/myphpdaemon.log
[Install]
WantedBy=default.target
आप कमांड का उपयोग करके शुरू करने, स्थिति प्राप्त करने, पुनरारंभ करने और सेवाओं को रोकने में सक्षम होंगे
systemctl <start|status|restart|stop|enable> myphpdaemon
PHP स्क्रिप्ट को चालू रखने के लिए एक प्रकार का "लूप" होना चाहिए।
<?php
gc_enable();//
while (!connection_aborted() || PHP_SAPI == "cli") {
//Code Logic
//sleep and usleep could be useful
if (PHP_SAPI == "cli") {
if (rand(5, 100) % 5 == 0) {
gc_collect_cycles(); //Forces collection of any existing garbage cycles
}
}
}
काम करने का उदाहरण:
[Unit]
Description=PHP APP Sync Service
Requires=mysqld.service memcached.service
After=mysqld.service memcached.service
[Service]
User=root
Type=simple
TimeoutSec=0
PIDFile=/var/run/php_app_sync.pid
ExecStart=/bin/sh -c '/usr/bin/php -f /var/www/app/private/server/cron/app_sync.php 2>&1 > /var/log/app_sync.log'
KillMode=mixed
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=default.target
यदि आपके PHP रूटीन को एक चक्र में (एक बार की तरह) निष्पादित किया जाना चाहिए, तो आपको उदाहरण के लिए सीधे PHP के बजाय systemd सर्विस फ़ाइल में शामिल होने के लिए एक शेल या बैश स्क्रिप्ट का उपयोग करना चाहिए:
#!/usr/bin/env bash
script_path="/app/services/"
while [ : ]
do
# clear
php -f "$script_path"${1}".php" fixedparameter ${2} > /dev/null 2>/dev/null
sleep 1
done
आप इन विकल्प आपको बदलना चाहिए चुना है KillMode लिए mixed
प्रक्रियाओं के लिए, पार्टी (मुख्य) और PHP (बच्चे) मारा जा।
ExecStart=/app/phpservice/runner.sh phpfile parameter > /dev/null 2>/dev/null
KillMode=process
This method also is effective if you're facing a memory leak.
नोट: हर बार जब आप अपने "myphpdaemon.service" को बदलते हैं तो आपको `सिस्टेक्टल डेमॉन-रीलोड 'चलाना होगा, लेकिन चिंता न करें यदि आप ऐसा नहीं करते हैं, तो यह आवश्यक होने पर सतर्क हो जाएगा।