Tạo daemon trên Ubuntu 16.04


13

Tôi đã phát triển trình thu thập thông tin trong PHP phân tích một URL với các tiêu đề cụ thể và đặt tất cả các URL của nội dung vào hàng đợi. Nó hoạt động tốt.

Tôi đã phát triển mã này trong một phiên bản Ubuntu 14.04 và tôi đặt một tệp .conf vào thư mục / etc / init với nội dung này:

# 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

Nó hoạt động tốt trong Ubuntu 14.04 và tôi có thể bắt đầu và dừng trình nền bằng cách sử dụng "sudo dịch vụ thu thập thông tin bắt đầu" và "dừng trình thu thập dịch vụ sudo"

Bây giờ trong môi trường sản xuất, tôi có một máy chủ Ubuntu 16.04 và tôi đặt cùng một mã trên cùng một thư mục nhưng khi tôi thử khởi động dịch vụ, tôi nhận được thông báo "Không thể khởi động Crawler.service. Không tìm thấy trình thu thập dữ liệu"

Bạn có thể giúp tôi về nó?

Trân trọng


Thiếu php thực thi trong / usr / bin / php? Kiểm tra nhật ký, bạn sẽ có một số thông tin
Dom

2
Ubuntu 16.04 sử dụng systemd. Tìm hiểu cách thức hoạt động và tạo một trình thu thập thông tin.
Halfgaar

Câu trả lời:


15

Thêm vào câu trả lời @Juanjo Aguilella Marés và khi bạn đã sao chép / liên kết tập lệnh của mình /etc/systemd/system, bạn có thể muốn tự động khởi động nó khi máy chủ khởi động:

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

Nguồn kỹ thuật số đại dương

Nó cũng là một ý tưởng tốt để không chạy nó như root. Chỉ cần thay đổi userdòng trên tập lệnh của bạn:

[Service]
User=some_user

12

Tôi giải quyết vấn đề:

a) Tạo một tệp thu thập thông tin. Dịch vụ trong / etc / systemd / system với mã này:

[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

tệp bash của tôi chứa các tệp thực thi khác nhau song song với cùng một tệp php có mã này:

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

giấc ngủ giữa các lần thực thi cần thiết để lưu vấn đề về việc thực thi quá nhanh của dịch vụ.

Nếu bạn có bất kỳ đề xuất nào về giải pháp, xin vui lòng nhận xét, tôi không có nhiều kinh nghiệm trong các tệp bash và tệp systemd, nhưng hiện tại hoạt động tốt.



4

1]. Để tạo một dịch vụ, hãy truy cập / etc / systemd / system /

2]. Tạo một tệp của serviceName, ví dụ như chatSocket.service

3]. Đặt nội dung vào tệp dưới đây

[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]. Tải lại cấu hình bằng cách nhấn:

sudo systemctl daemon-reload

5]. Bật dịch vụ theo mặc định để khi dịch vụ khởi động hệ thống sẽ tự động khởi động:

sudo systemctl enable my_service.service

6]. Bắt đầu dịch vụ của bạn bằng cách sử dụng lệnh dưới đây:

sudo systemctl start my_service.service

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.