আমি কিভাবে আপস্টার্ট মাধ্যমে nginx শুরু করতে পারি?


9

পটভূমি:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04 LTS"

আমি nginx তৈরি করেছি, এবং আমি এটি শুরু করতে আপস্টার্ট ব্যবহার করতে চাই:

সাইট থেকে nginx আপস্টার্ট স্ক্রিপ্ট:

description "nginx http daemon"

start on runlevel 2

stop on runlevel 0
stop on runlevel 1
stop on runlevel 6

console owner

exec /usr/sbin/nginx -c /etc/nginx/nginx.conf  -g "daemon off;"

respawn

আমি যখন এটি চালানোর জন্য আরআরসিটিএল ব্যবহার করার চেষ্টা করি তখন আমি "অজানা কাজ" পাই, যা আমি সবেমাত্র শিখেছি এর অর্থ একটি ত্রুটি আছে, (ত্রুটিগুলি বর্ণনা করতে "ত্রুটি" দিয়ে কী হয়েছে?)

কেউ আমাকে সঠিক পথ নির্দেশ করতে পারবেন ? আমি ডকুমেন্টেশনটি যেমন পড়েছি তেমনি পড়েছি এবং এটি একটি এসআইএসআইআইআই প্রতিস্থাপনের জন্য এক প্রকার বিরল বলে মনে হচ্ছে ... তবে এই কাজটি তালিকায় যুক্ত করার জন্য, এটি চালানো এবং আমার জীবনের বাকী যা আছে তা নিয়ে চালিয়ে যাওয়া দরকার। .. কোন টিপস?

সম্পাদনা: initctl সংস্করণ init (আপস্টার্ট 0.6.5)


1
'অজানা কাজ' বনাম 'ত্রুটি' সম্পর্কে একটি মন্তব্য। আপনি ঠিক ভুল জায়গায় খুঁজছেন। ইন্টিচটেল কনফিগার ফাইলটি পড়েন না, এটি কেবলমাত্র আপস্টার্টকে একটি জ্ঞাত কাজ লোড করতে বলে - এবং আপনি যখন initctl কমান্ড জারি করবেন তখন আপস্টার্ট এই কাজটি জানেন না। আপস্টার্ট কাজের ফাইলটি পড়ার চেষ্টা করার আগে ত্রুটি ঘটেছে। সিস্টেম লগ-এ একটি ত্রুটি বার্তা থাকতে হবে (/ var / লগ / সিসলগ, / ভার / লগ / বার্তা বা আপনার সিস্টেম যেখানেই এই লগগুলি সঞ্চয় করে)
জেসেক কোনিজনি

যাইহোক, এটি সক্রিয় যে / এসবিনে আপস্টার্ট কাজের জন্য স্টার্ট এবং স্টপ কমান্ড রয়েছে। তারা আমার জন্য কাজ করেছে। এখন, তারা inittl এ আবার লিঙ্ক করেছে, সুতরাং তারা কেন কাজ করে তা সম্পর্কে আমি নিশ্চিত নই, তবে তারা তা করে।
চিগজি

উত্তর:


3

stop onআপস্টার্ট> = 0.5 এর জন্য একটি আপস্টার্ট কাজের বিবরণে আপনার একাধিক নির্দেশিকা থাকতে পারে না ।

এবং console ownerসম্ভবত আপনি যা চান তা নয় (এটি এনজিন্সকে সিস্টেম কনসোলের মালিক করে তোলে)।

চেষ্টা করুন:

description "nginx http daemon"
start on runlevel 2
stop on runlevel [016]
console output
exec /usr/sbin/nginx -c /etc/nginx/nginx.conf  -g "daemon off;"
respawn

এখনও অজানা কাজ, হায়। আপনি কোথা থেকে এই তথ্য পাচ্ছেন? মানুষ? তথ্য? অনলাইন? যেখানে 0.6.5 নথিভুক্ত করা হয়?
চিগসি

কিন্ডা কাজ করেছেন ..
thnx

হ্যাঁ, কমপক্ষে ওয়েবে বর্তমান আপস্টার্ট ডকুমেন্টেশনগুলি খুঁজে পাওয়া শক্ত। তবে ম্যানুয়াল পৃষ্ঠাটি বেশ ভাল। চেষ্টা করুন: man 5 init
Jacek Konieczny

1
এটি প্রোডাকশন সার্ভারগুলিতে এনগিনেক্স চালানোর সঠিক উপায় নয়। daemon offবিকল্পটি কেবল উন্নয়নের জন্য।
ফিল্ট

16

আমি এখানে একাধিকবার শেষ করেছি তাই আমি ভেবেছিলাম উত্তরগুলি এখানে ব্যবহার করার পরে আমার নিজের অভিজ্ঞতার ভিত্তিতে একটি আপডেট উত্তর সরবরাহ করব। তাদের উত্তরগুলির জন্য বিশেষত @ আদরনটন এবং @ জর্জকে ধন্যবাদ

এই স্ক্রিপ্টটি উবার্টু ১২.০৪-তে এনগিনেক্স ০.০.১১ এবং যাত্রীবাহী 3.0.০.১১ সহ চলমান আপস্টার্ট 1.5 তে পরীক্ষা করা হয়েছে। আপনি যদি যাত্রী ব্যবহার না করে থাকেন তবে আপনাকে post-stopলাইনটি নিয়ে প্রায় খেলতে হবে । আপস্টার্ট কুকবুক দেখুন।

খালিটিতে /etc/init/nginx.confনিম্নলিখিত লাইনগুলি যুক্ত করুন (আপনি চাইলে মন্তব্যগুলি সরাতে পারেন):

description "nginx http daemon"

start on (filesystem and net-device-up IFACE=lo)
stop on runlevel [!2345]

env DAEMON=/usr/local/nginx/sbin/nginx
env PIDFILE=/var/run/nginx.pid

# Needed to allow Nginx to start, however, the wrong PID will be tracked
expect fork

# Test the nginx configuration (Upstart will not proceed if this fails)
pre-start exec $DAEMON -t

# Ensure nginx is shutdown gracefully
# Upstart will be tracking the wrong PID so the following is needed to stop nginx
post-stop exec start-stop-daemon --stop --pidfile $PIDFILE --name nginx --exec $DAEMON --signal QUIT

# Start Nginx
exec $DAEMON

আমি এনগিনেক্স উইকি থেকে আপস্টার্ট স্ক্রিপ্টটি নিয়েছি এবং অনেকগুলি লাইনের প্রয়োজন নেই, বিভ্রান্তি সৃষ্টি করতে পারে না বা কাজ করে না বলে এটি টুইট করেছি।

আপনি যেখানে এনজিএক্স ইনস্টল করেছেন এবং পিআইডি লিখছেন তার উপর নির্ভর করে আপনার পরিবর্তন করতে হবে env DAEMONএবং env PIDরেখাগুলির প্রয়োজন হতে পারে । পিআইডি nginx এ কনফিগার করা যায়।

আমি সব ধরণের চেষ্টা করেছি expect। শুধু expect forkকাজ মনে হয়। যাত্রীবাহী nginx দিয়ে 61 কাঁটাচামচ তৈরি করে। আপস্টার্টটির জন্য 0, 1 বা 2 প্রয়োজন। অন্যরা যেমন ইঙ্গিত করেছে, আপস্টার্ট ভুল পিআইডি ট্র্যাক করবে। আমিও সরিয়েছি respawnকারণ এটি একই কারণে সম্ভবত কিছু না করে। কিছু অতিরিক্ত প্রাক / প্রারম্ভের পরে স্ক্রিপ্ট আসল পিআইডি দখল করে এটি ঠিক করতে সক্ষম হতে পারে। আমি যাইহোক, পুনঃসূচনাগুলি পরিচালনা করতে মনিট ব্যবহার করি সুতরাং এটির দরকার নেই।

ব্যবহার করবেন না daemon off। এটি কেবল উন্নয়নের জন্য। Http://wiki.nginx.org/CoreModule#daemon দেখুন

তথ্যসূত্র:


1
আমি মনে করি যে আপনি হবে হবে ব্যবহার চালাতে চান daemon off;, যাতে ভুঁইফোড় প্রয়োজন ছাড়াই সঠিক প্রক্রিয়া / PID, ঘড়ির expect forkবা post-stopনির্দেশনা। উইকি অধ্যায় ডেমন বিকল্প বর্ণনা এও "আপনি, runit / daemontools সঙ্গে উৎপাদন মোডে নিরাপদে বন্ধ ডেমন ব্যবহার করতে পারেন একটি সুতনু আপগ্রেড তবে আপনি করতে পারবেন না।", যা আমি অনুমান উল্লেখ করা হয় -এ একটি নতুন বাইনারিতে আপগ্রেড উড়ান বৈশিষ্ট্য।
গ্যারি

3

আপনি পারবেন না। কমপক্ষে সঠিকভাবে, যাই হোক না কেন।

আপিনস্টার্টের যে দুটি উপায়ে প্রয়োজন সেগুলির একটিতে Nginx তার ডেমনকে স্প্যান করে না, হয় "প্রত্যাশা কাঁটাচামচ" বা "প্রত্যাশিত ডেমোন" এর মাধ্যমে, তাই আপস্টার্ট মাস্টার এনগিনেক্স প্রক্রিয়াটি ট্র্যাক করতে অক্ষম। কিছু হ্যাক রয়েছে তবে তাদের নিজস্ব সমস্যা রয়েছে।

যদি আপনি এই সত্যটি দিয়ে ঠিক থাকেন যে আপস্টার্ট মাস্টার প্রক্রিয়াটির উপর নজর রাখতে পারে না এবং এটি শাটডাউনে হত্যা করতে পারে তবে এটি কাজ করবে:

start on local-filesystems \
  and (net-device-added INTERFACE=lo) \
  and (runlevel [12345])
stop on runlevel [06]

env DAEMON=/usr/sbin/nginx

respawn
respawn limit 10 5

expect daemon

pre-start script
  $DAEMON -t
end script

$DAEMON

expect daemonআপস্টার্ট আমার জন্য ঝুলিয়ে দেয় (উবুন্টু 12.04, আপস্টার্ট 1.5, এনগিনেক্স)। expect fork@ এডান্টর্টন ইঙ্গিত হিসাবে কাজ করলেও আপস্টার্ট ভুল পিআইডি ট্র্যাক করবে। আমি কাজ করার জন্য রেসনও পাইনি (আমার সম্পূর্ণ উত্তর দেখুন)।
ফিল্ট

2

এনজিআইএনএক্স উইকিতে একটি আপস্টার্ট কনফিগারেশন ফাইলের উদাহরণ রয়েছে ।

আপনার কনফিগার ফাইলে nginx বাইনারি পাথ সামঞ্জস্য করতে হতে পারে।

এই কনফিগারেশন ফাইলটি আমার জন্য উবুন্টু 10.04 এবং এনগিনেক্স 1.0.5 এর সাথে দুর্দান্ত কাজ করছে।

আমি নির্দেশ করে একটি nginxসিমিলিংকও ইনস্টল করেছি যাতে আমি স্ট্যান্ডার্ড কমান্ডটি শুরু করতে এবং থামাতে ব্যবহার করতে পারি ।/etc/init.d/lib/init/upstart-jobservicenginx

দ্রষ্টব্য: আপনি যদি এনজিআইএনএক্সের সাথে ফিউশন যাত্রীবাহী ইনস্টল করেন তবে আপনাকে আপস্টার্ট কনফিগার স্ক্রিপ্টে নিম্নলিখিত স্তবকটি যুক্ত করতে হতে পারে:

env PID=/opt/nginx/logs/nginx.pid
post-stop script
    start-stop-daemon --stop --pidfile $PID --name nginx --exec $DAEMON --signal TERM
end script

আমি আমার উবুন্টু কনফিগারেশনে এটি প্রয়োজনীয় পেয়েছি। অন্যথায় যখন আমি জারি করেছি initctl stop nginxবা service nginx stopএনগিনেক্স আসলে থামেনি। আমি আরও লক্ষ্য করেছি যে আপস্টার্ট ভেবেছিল এনগিনেক্স প্রক্রিয়াটির একটি পিআইডি ছিল যা আসলে যাত্রীবাহী প্রক্রিয়ার মধ্যে একটির পিআইডি ছিল। সুতরাং পরিষ্কারভাবে এনজিআইএনএক্স / যাত্রী আপস্টার্টকে কিছুটা বিভ্রান্ত করছে।


যাত্রীর জন্য সেই স্ক্রিপ্টের জন্য ধন্যবাদ। এটি প্রক্রিয়াগুলি বন্ধ করে দিয়েছে বলে মনে হচ্ছে তবে এটি করার stop: Job failed while stoppingসময় আমি পেয়েছি । তুমি কি এটা দেখেছিলে?
ফিলিপ

আমার @ ফিল্টের মতো একই সমস্যা আছে, এর কোনও শব্দ?
ক্লোদিও পলি

0

আমি ব্যবহার করি:

description "Nginx HTTP Server"

start on filesystem
stop on runlevel [!2345]

respawn

exec /opt/nginx/sbin/nginx -g "daemon off;"

স্টপ অন runlevel [!...]আরও মানক বলে মনে হচ্ছে। এটি স্টক ssh / সাম্ব স্ক্রিপ্টগুলি করে। respawnআপনারও কিছুটা যুক্ত করা উচিত যাতে এটি মরে গেলে পুনরায় চালু হয়। আমি নিশ্চিত না আপনি কেন চান console outputতা কেবল স্টডআউটে কনসোল আউটপুট প্রেরণ করে। ডিফল্ট আচরণটি হ'ল লগারে কেবল কনসোল আউটপুট প্রেরণ করা।

আপনি উপস্টার্ট উইকিতে সমস্ত স্তম্ভ ডক দেখতে পারেন


দুর্ভাগ্যক্রমে, এই উইকিটি বোঝায় যে এটি কেবলমাত্র 0.5 সংস্করণ। আমার কাছে খুব আশ্চর্যের বিষয় যে এই জাতীয় পরিবর্তনটি সেই ফ্যাশনে নথিভুক্ত করা হয়।
চিগজি

শুধুমাত্র সংস্করণ 0.5?
জিম মিচিটনার

সাধারণভাবে উইকি। ম্যান পেজগুলি ঠিক আছে, তবে তারা নিশ্চিত যে 'তথ্য' পৃষ্ঠা নয়, যা সাধারণত আরও বিস্তারিত।
চিগজি


0

অদ্ভুতভাবে এখানে উত্তরগুলির কোনওোটাই সম্পূর্ণরূপে কাজ করে না কারণ তারা স্টপ / মেরে যাওয়া অবস্থায় ছেড়ে যায় যা অন্য কাজ শুরু করে। এর অর্থ restart nginxব্যর্থ।

আপস্টার্ট সহ বাগটি https://bugs.launchpad.net/upstart/+bug/406397 এ ভালভাবে নথিভুক্ত হয়েছে এবং আমি অবাক হয়েছি যে আপস্টার্টের লেখক এটি ঠিক করার জন্য যথেষ্ট যত্ন নিচ্ছেন না। আমি যে সমাধানটি দেখেছি তার মধ্যে কেবলমাত্র নিম্নলিখিত সমাধানগুলি হ'ল (একই বাগ রিপোর্ট থেকে চুরি করা):

# nginx - Nginx Web Server
#

description "Nginx Web Server"

start on (local-filesystems and
    (net-device-up IFACE=eth1 or net-device-up IFACE=eth0) )
stop on runlevel [!2345]

env DAEMON=/usr/local/sbin/nginx
env PID=/var/run/nginx.pid

respawn

pre-start script
$DAEMON -s stop 2> /dev/null || true
$DAEMON -t > /dev/null
$DAEMON
end script

script
sleepWhileAppIsUp(){
    while pidof $1 >/dev/null; do
    sleep 1
    done
}
sleepWhileAppIsUp $DAEMON
end script

post-stop script
if pidof > /dev/null $DAEMON;
then
    $DAEMON -s stop
fi
end script

এটি লিখতে সুবিধা হ'ল এমনকি রেসনও কাজ করে। অসুবিধাটি হ'ল এটি কুৎসিত এবং একটি বাজে হ্যাক।


আপস্টার্ট বেশ মৃত পণ্য; উবুন্টু এটি ব্যবহার করে প্রায় শেষ বিতরণ। অন্য সমস্তগুলি স্যুইচ করছে বা ইতিমধ্যে স্যুইচ করেছে।
মাইকেল হ্যাম্পটন

এমনকি উবুন্টু নিজেই নতুন সংস্করণগুলিতে সিস্টেমডে স্যুইচ করেছে। কিন্তু আমাদের কিছু সিসাদমিন এখনও 14.04 দিয়ে আটকে আছে কারণ এলটিএস।
ইভান আনিশচুক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.