Створіть демон на ubuntu 16.04


13

Я розробив гусеничну програму в PHP, яка розбирає URL з конкретними заголовками і ставить усі URL-адреси вмісту в чергу. Це чудово працює.

Я розробив цей код в ubuntu 14.04 і помістив файл .conf у папку / 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, і я можу запустити і зупинити демон, використовуючи "старт роботи гусеничного сервісу sudo" та "зупинка гусеничного сервісу sudo"

Тепер у виробничому середовищі у мене є сервер Ubuntu 16.04, і я вкладаю той самий код у ту саму папку, але коли я намагаюся запустити послугу, я отримую повідомлення "Не вдалося запустити crawler.service. Unit crawler.service not found"

Чи можете ви мені допомогти?

З повагою


Файл 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

Джерело Digital Ocean

Також непогано не запускати його як root. Просто змініть 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

мій файл bash містить різні виконання паралельно тому ж файлу 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 та системними файлами, але на даний момент працює чудово.



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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.