Buat daemon di ubuntu 16.04

13

Saya mengembangkan perayap dalam PHP yang mem-parsing URL dengan tajuk spesifik dan meletakkan semua URL konten dalam antrian. Ini bekerja dengan baik.

Saya mengembangkan kode ini di ubuntu 14.04 dan saya meletakkan file .conf di folder / etc / init dengan konten ini:

# 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

Ini berfungsi dengan baik di Ubuntu 14.04 dan saya dapat memulai dan menghentikan daemon menggunakan "sudo service crawler start" dan "sudo service crawler stop"

Sekarang dalam lingkungan produksi saya memiliki server Ubuntu 16.04 dan saya meletakkan kode yang sama pada folder yang sama tetapi ketika saya mencoba memulai layanan saya menerima pesan "Gagal memulai crawler.service. Unit crawler.service tidak ditemukan"

Bisakah Anda memberi saya bantuan tentang hal itu?

Salam

Juanjo Aguilella Marés
sumber
Php tidak dapat dieksekusi di / usr / bin / php? Periksa log, Anda akan memiliki beberapa informasi
Dom
2
Ubuntu 16.04 menggunakan systemd. Cari tahu cara kerjanya, dan buat layanan crawler.ser.
Halfgaar

Jawaban:

15

Menambahkan ke jawaban @Juanjo Aguilella Marés, dan setelah Anda menyalin / menautkan skrip /etc/systemd/systemAnda, Anda mungkin ingin memulai secara otomatis ketika server mulai:

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

Sumber Digital Ocean

Sebaiknya jangan jalankan sebagai root. Cukup ganti userbaris pada skrip Anda:

[Service]
User=some_user
Andres
sumber
12

Saya memecahkan masalah:

a) Buat file crawler.service di / etc / systemd / system dengan kode ini:

[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

file bash saya berisi eksekusi yang berbeda secara paralel dengan file php yang sama dengan kode ini:

#!/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
}

tidur di antara eksekusi diperlukan untuk menyelamatkan masalah tentang eksekusi yang begitu cepat dari layanan.

Jika Anda memiliki saran tentang solusinya, silakan berkomentar, saya tidak punya banyak pengalaman dalam file bash dan file systemd, tetapi saat ini berfungsi dengan baik.

Juanjo Aguilella Marés
sumber
4

1]. Untuk membuat layanan, buka / etc / systemd / system /

2]. Buat file serviceName misalnya chatSocket.service

3]. Masukkan konten ke file sebagaimana diberikan di bawah ini

[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]. Muat ulang konfigurasi dengan menekan:

sudo systemctl daemon-reload

5]. Aktifkan layanan secara default sehingga ketika layanan sistem mulai secara otomatis akan mulai:

sudo systemctl enable my_service.service

6]. Mulai layanan Anda dengan menggunakan perintah di bawah ini:

sudo systemctl start my_service.service

Shree29
sumber