私はPHPでクローラーを開発し、特定のヘッダーを持つURLを解析して、コンテンツのすべてのURLをキューに入れました。正常に動作します。
私はubuntu 14.04でこのコードを開発し、/ etc/initフォルダーに.confファイルを次の内容で配置しました。
# 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を開始できませんでした。ユニットcrawler.serviceが見つかりません」というメッセージが表示されます。
それについて私に何か助けてもらえますか?
よろしく
@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
私は問題を解決しました:
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ファイルの経験はあまりありませんが、現時点では問題なく動作します。
14.04のinitシステムは新興企業です。 16.04のinitシステムはsystemdです。 pstartスクリプトをsystemdに変換する ユニットファイルにする必要があります。 他にもたくさんのリソース もあります。
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