Ubuntu 16.04でデーモンを作成する


13

特定のヘッダーを持つURLを解析し、コンテンツのすべてのURLをキューに入れるPHPのクローラーを開発しました。正常に動作します。

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 service crawler start」および「sudo service crawler stop」を使用してデーモンを起動および停止できます。

現在、本番環境ではUbuntu 16.04サーバーがあり、同じフォルダーに同じコードを配置していますが、サービスを開始しようとすると、「crawler.serviceの開始に失敗しました。Unitcrawler.serviceが見つかりません」というメッセージが表示されます

それについて何か助けてもらえますか?

よろしく


/ usr / bin / phpにphp実行ファイルがありませんか?ログを確認してください、いくつかの情報があります
Dom

2
Ubuntu 16.04はsystemdを使用します。それがどのように機能するかを調べ、crawler.serviceを作成します。
Halfgaar

回答:


15

@Juanjo AguilellaMarésの回答に追加し、スクリプトをにコピー/リンクしたら/etc/systemd/system、サーバーの起動時にスクリプトを自動的に開始することができます。

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

ソースデジタルオーシャン

また、rootとして実行しないことをお勧めします。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ファイルと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.