우분투 16.04에서 데몬 만들기


13

특정 헤더로 URL을 구문 분석하고 모든 콘텐츠 URL을 대기열에 넣는 크롤러를 PHP로 개발했습니다. 잘 작동합니다.

우분투 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 service crawler start"및 "sudo service crawler stop"을 사용하여 데몬을 시작 및 중지 할 수 있습니다.

이제 프로덕션 환경에서 Ubuntu 16.04 서버가 있고 동일한 폴더에 동일한 코드를 넣었지만 서비스를 시작하려고 할 때 "크롤러. 서비스를 시작하지 못했습니다. 단위 크롤러. 서비스를 찾을 수 없습니다"라는 메시지가 나타납니다.

그것에 대해 도움을 줄 수 있습니까?

문안 인사


/ usr / bin / php에 PHP 실행 파일이 없습니까? 로그를 확인하면 몇 가지 정보를 얻을 수 있습니다
Dom

2
우분투 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)이 코드를 사용하여 / etc / systemd / system에 crawler.service 파일을 만듭니다.

[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).

삼]. 다음과 같이 파일에 내용을 넣습니다.

[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.