สร้าง daemon บน ubuntu 16.04


13

ฉันพัฒนาซอฟต์แวร์รวบรวมข้อมูลใน PHP ที่แยก URL ด้วยส่วนหัวที่เฉพาะเจาะจงและใส่ URL ทั้งหมดของเนื้อหาไว้ในคิว มันใช้งานได้ดี

ฉันพัฒนารหัสนี้ใน Ubuntu 14.04 และฉันใส่ไฟล์. config ลงในโฟลเดอร์ / etc / init ด้วยเนื้อหานี้:

# Info
description "Warm the varnish to get the list of products"
author      "Juanjo Aguilella"

# Events
start on startup
stop on shutdown

# Automatically respawn
respawn
respawn limit 100 5

# Run the script
# Note, in this example, if your PHP script return
# the string "ERROR", the daemon will stop itself.
script
    [ $(exec /usr/bin/php -f /var/www/crawler.php) = 'ERROR' ] && ( stop; exit 1; )  
end script

มันทำงานได้ดีใน Ubuntu 14.04 และฉันสามารถเริ่มและหยุด daemon โดยใช้ "sudo service crawler start" และ "sudo service crawler stop"

ตอนนี้ในสภาพแวดล้อมการผลิตฉันมีเซิร์ฟเวอร์ Ubuntu 16.04 และฉันใส่รหัสเดียวกันในโฟลเดอร์เดียวกัน แต่เมื่อฉันพยายามเริ่มบริการฉันได้รับข้อความ "ไม่สามารถเริ่มซอฟต์แวร์รวบรวมข้อมูลบริการหน่วยตรวจสอบไม่พบหน่วย"

คุณช่วยฉันได้ไหม

ความนับถือ


ไม่มี php ที่สามารถใช้งานได้ใน / usr / bin / php ตรวจสอบบันทึกคุณจะมีข้อมูลบางส่วน
Dom

2
Ubuntu 16.04 ใช้ systemd ค้นหาวิธีการใช้งานและสร้าง crawler.service
Halfgaar

คำตอบ:


15

การเพิ่ม @Juanjo Aguilella Marésคำตอบและเมื่อคุณคัดลอก / เชื่อมโยงสคริปต์ของคุณ/etc/systemd/systemแล้วคุณอาจต้องการเริ่มโดยอัตโนมัติเมื่อเซิร์ฟเวอร์เริ่มทำงาน:

sudo systemctl daemon-reload
sudo systemctl enable my_service.service
sudo systemctl start my_service.service

แหล่งมหาสมุทรดิจิตอล

มันเป็นความคิดที่ดีที่จะไม่เรียกใช้มันในฐานะรูท เพียงแค่เปลี่ยนuserบรรทัดในสคริปต์ของคุณ:

[Service]
User=some_user

12

ฉันแก้ไขปัญหา:

a) สร้างไฟล์ crawler.service ใน / etc / systemd / system ด้วยรหัสนี้:

[Unit]
Description=Crawler cache Service
After=network.target

[Service]
User=root
Restart=always
Type=forking
ExecStart=/var/www/execute.sh

[Install]
WantedBy=multi-user.target

ไฟล์ทุบตีของฉันมีการดำเนินการที่แตกต่างกันในแบบคู่ขนานกับไฟล์ php เดียวกันด้วยรหัสนี้:

#!/bin/sh
php /var/www/tiendas.local.mediamarkt.es/crawler.php
sleep 0.1
{
    php /var/www/tiendas.local.mediamarkt.es/crawler.php
}&
sleep 0.2
{
    php /var/www/tiendas.local.mediamarkt.es/crawler.php
}&
sleep 0.3
{
    php /var/www/tiendas.local.mediamarkt.es/crawler.php
}&
sleep 0.4
{
    php /var/www/tiendas.local.mediamarkt.es/crawler.php
}

สลีประหว่างการประมวลผลจำเป็นต้องบันทึกปัญหาเกี่ยวกับการดำเนินการอย่างรวดเร็วของบริการ

หากคุณมีข้อเสนอแนะเกี่ยวกับการแก้ปัญหาโปรดแสดงความคิดเห็นฉันไม่มีประสบการณ์มากในไฟล์ bash และไฟล์ systemd แต่ตอนนี้ทำงานได้ดี



4

1] หากต้องการสร้างบริการให้ไปที่ / etc / systemd / system /

2] สร้างไฟล์ serviceName เช่น chatSocket.service

3] ใส่เนื้อหาที่จะยื่นตามที่ได้รับร้อง

[Unit]
Description=Your PHP Daemon Service
#Requires=mysqld.service memcached.service #May your script needs mysql or other services to run.
#After=mysqld.service memcached.service

[Service]
User=root
Type=simple
TimeoutSec=0
PIDFile=/var/run/server.pid
ExecStart=/usr/bin/php -f /home/shrikant/workspace/app/Http/Controllers/server.php  2>&1> /dev/null #path to script
#ExecStop=/bin/kill -HUP $MAINPID
#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=/home/shrikant/workspace/app/Http/Controllers/chatSocket.log #path to error log file
[Install]
WantedBy=default.target

4] โหลดการกำหนดค่าซ้ำโดยกดปุ่ม:

sudo systemctl daemon-reload

5] เปิดใช้งานบริการตามค่าเริ่มต้นดังนั้นเมื่อระบบเริ่มบริการจะเริ่มโดยอัตโนมัติ:

sudo systemctl enable my_service.service

6] เริ่มบริการของคุณโดยใช้คำสั่งด้านล่าง:

sudo systemctl start my_service.service

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.