নতুন সিস্টেমডের সাহায্যে আপনি একটি পরিষেবা তৈরি করতে পারেন।
আপনি একটি ফাইল বা তৈরি করতে হবে সিমবলিক লিঙ্ক এ /etc/systemd/system/
যেমন। myphpdaemon.service এবং এটির মতো সামগ্রী রাখুন, মাইফপডেমোন সেবার নাম হবে:
[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
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
যদি আপনার পিএইচপি রুটিন একবার একবার চক্রের মধ্যে চালিত করা উচিত (ডিজাইগস্টের মতো) আপনার পিএইচপি-র পরিবর্তে সরাসরি সিস্টেমেড সার্ভিস ফাইলে ডাকার জন্য শেল বা ব্যাশ স্ক্রিপ্ট ব্যবহার করা উচিত, উদাহরণস্বরূপ:
#!/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
প্রসেস করা, ব্যাশ (প্রধান) এবং পিএইচপি (শিশু) হত্যা করা হয়।
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 "পরিবর্তন করেছেন তখন অবশ্যই আপনাকে অবশ্যই` systemctl ডেমন-রিলোড 'চালাতে হবে, তবে আপনি যদি তা না করেন তবে চিন্তিত হন, যখন প্রয়োজন হবে তখন সতর্কতা অবলম্বন করা হবে।