আমি আমার নোড সার্ভারটি চালু রাখতে নোডের চিরতরে মডিউলটি ব্যবহার করছি। কোনও সিস্টেম পুনরায় চালু হওয়ার পরে চিরতরে বন্ধ হয়। সিস্টেম পুনরায় চালু হওয়ার সাথে সাথে আমি স্বয়ংক্রিয়ভাবে নোড সার্ভারটি চালু করতে পারি (চিরকালের সাথে)?
আমি আমার নোড সার্ভারটি চালু রাখতে নোডের চিরতরে মডিউলটি ব্যবহার করছি। কোনও সিস্টেম পুনরায় চালু হওয়ার পরে চিরতরে বন্ধ হয়। সিস্টেম পুনরায় চালু হওয়ার সাথে সাথে আমি স্বয়ংক্রিয়ভাবে নোড সার্ভারটি চালু করতে পারি (চিরকালের সাথে)?
উত্তর:
আমি ক্রন্টব ব্যবহার করার পরামর্শ দেব। এটি ব্যবহার করা সহজ।
সম্পাদনা শুরু করতে নোড প্রক্রিয়াটির জন্য আপনার পছন্দসই রানটাইম ব্যবহারকারীর সাথে "টেস্টুসার" এর পরিবর্তে নিম্নলিখিতটি চালান। আপনি যদি নিজেকে বাদ দিয়ে অন্য কোনও ব্যবহারকারী চয়ন করেন তবে আপনাকে এটি sudo দিয়ে চালাতে হবে।
$ crontab -u testuser -e
আপনি যদি এর আগে কখনও না করেন তবে এটি আপনাকে জিজ্ঞাসা করবে আপনি কোন সম্পাদকের সাথে সম্পাদনা করতে চান। আমি ভিম পছন্দ করি তবে ব্যবহারের সহজতার জন্য ন্যানোর পরামর্শ দেব।
একবার সম্পাদক এ নিম্নলিখিত লাইন যুক্ত করুন:
@reboot /usr/local/bin/forever start /your/path/to/your/app.js
ফাইলটি সংরক্ষণ করুন। আপনার কিছু প্রতিক্রিয়া পাওয়া উচিত যে ক্রোন ইনস্টল করা হয়েছে।
ক্রোন ইনস্টলের আরও নিশ্চিতকরণের জন্য, বর্তমানে ইনস্টল করা ক্রোনগুলি তালিকাভুক্ত করতে নিম্নলিখিতগুলি প্রয়োগ করুন (আবার আপনার টার্গেট ব্যবহারকারীর সাথে "পরীক্ষক" প্রতিস্থাপন করুন):
$ crontab -u testuser -l
মনে রাখবেন যে আমার মতে, ক্রোনে বাইনারিগুলি কার্যকর করার সময় আপনার সর্বদা পুরো পথ ব্যবহার করা উচিত। এছাড়াও, যদি আপনার চিরকালের স্ক্রিপ্টের পথটি সঠিক না হয় which forever
তবে পুরো পথটি পেতে দৌড়ুন।
সেই forever
কলগুলি দেওয়া node
, আপনি এতে সম্পূর্ণ পথ সরবরাহ করতে চাইতে পারেন node
:
@reboot /usr/local/bin/forever start -c /usr/local/bin/node /your/path/to/your/app.js
@reboot
শুরু deamon ক্রন উপর ক্রন রান করুন। যোগ করার জন্য আমি কখনই এমন পরিস্থিতিটি দেখতে পাইনি যা পরামর্শ দেয় যে আমার ক্রোনগুলি সেট করা আছে যা @reboot
সিস্টেম বুটে চালিত হয় না। আপনি যেভাবে এটি বন্ধ করবেন এটি এর জন্য অপ্রাসঙ্গিক।
/home
এখনও মাউন্ট করা হয়নি বলে মনে হয়, তাই আপনার কোডটি যদি বাস করে তবে এটি কাজ করবে না /home
।
@reboot varname=value ...
এটি করার জন্য আপনি চিরকালের জন্য পরিষেবাটি ব্যবহার করতে পারেন।
npm install -g forever-service
forever-service install test
এটি চলতি ডিরেক্টরিতে অ্যাপ্লিকেশনগুলিকে পরিষেবা হিসাবে চিরকালের জন্য সরবরাহ করবে। প্রতিবার সিস্টেম পুনরায় চালু হওয়ার সাথে সাথে পরিষেবাটি স্বয়ংক্রিয়ভাবে পুনঃসূচনা হবে। এছাড়াও বন্ধ হয়ে গেলে এটি একটি দুর্দান্ত স্টপ চেষ্টা করবে। এই স্ক্রিপ্টটি লোগ্রোটেট স্ক্রিপ্টেরও বিধান করে।
গিথুব ইউআরএল: https://github.com/zapty/firever-service
দ্রষ্টব্য: আমি চির-সেবার লেখক।
forever-service install test
, পরিষেবারtest
নাম হবে তবে চালানোর জন্য প্রকৃত প্রোগ্রাম / নোড .js ফাইলের নাম নয়। ডিফল্টরূপে, এটা অনুমান প্রোগ্রামের নাম , কিন্তু আপনি দিয়ে এটিকে ওভাররাইড করতে পারেন , ফ্ল্যাগ নিম্নরূপ: । (স্বাক্ষরিত, সুতরাং দয়া করে কোনও app.js
--script
forever-service install test --script main.js
এই কেসটি দেবিয়ানদের পক্ষে বৈধ।
নিম্নলিখিতটি যুক্ত করুন /etc/rc.local
/usr/bin/sudo -u {{user}} /usr/local/bin/forever start {{app path}}
{{user}}
আপনার ব্যবহারকারীর নামটি প্রতিস্থাপন করে। {{app path}}
আপনার অ্যাপ্লিকেশন পথ প্রতিস্থাপন করে। উদাহরণ স্বরূপ,/var/www/test/app.js
/etc/rc.local
, না/etc/init.d/rc.local
app.js
আপেক্ষিক ফাইলগুলি সঠিকভাবে লোড হচ্ছে তা নিশ্চিত করতে আপনি 'বর্তমান ওয়ার্কিং ডিরেক্টরি' নির্দিষ্ট করতে চাইতে পারেন - process.chdir('/your/path/to/your/app');
নোড.জেএস রেফ ডক্স এখানে
/etc/rc.local
আমার জন্য ট্রিকটি করতে নিম্নলিখিত লাইনটি যুক্ত করুন :( cd /path/to/project && /usr/bin/sudo -u {{user}} env PORT={{port number}} PATH=$PATH:/usr/local/bin sh -c "forever start app.js" )
এনপিএম ব্যবহার করে বিশ্বব্যাপী পিএম 2 ইনস্টল করুন
npm install pm2 -g
আপনার স্ক্রিপ্ট pm2 দিয়ে শুরু করুন
pm2 start app.js
একটি সক্রিয় সূচনা স্ক্রিপ্ট উত্পন্ন
pm2 startup
দ্রষ্টব্য: সিস্টেম পুনরায় বুট করার সময় PM2 প্রারম্ভকালীন PM2 শুরু করার জন্য। পিএম 2 একবার শুরু হয়েছিল, সিস্টেমটি নেমে যাওয়ার আগে এটি পরিচালিত সমস্ত প্রক্রিয়া পুনরায় চালু করে।
আপনি যদি স্বয়ংক্রিয় স্টার্টআপটি অক্ষম করতে চান তবে কেবল pm2 আনস্টার্টআপ ব্যবহার করুন
আপনি যদি চান যে অন্য কোনও ব্যবহারকারীর অধীনে স্টার্টআপ স্ক্রিপ্টটি কার্যকর করা যায়, কেবল -u <username>
বিকল্প এবং এটি ব্যবহার করুন--hp <user_home>:
এই উত্তর এবং এই ব্লগ পোস্ট দ্বারা অনুপ্রাণিত একটি বিকল্প crontab পদ্ধতি ।
1. একটি বাশ স্ক্রিপ্ট ফাইল তৈরি করুন (পছন্দসই ব্যবহারকারীকে বব পরিবর্তন করুন)।
vi /home/bob/node_server_init.sh
২. এটি সবে তৈরি করা ফাইলের মধ্যে এটি অনুলিপি করুন এবং আটকান।
#!/bin/sh
export NODE_ENV=production
export PATH=/usr/local/bin:$PATH
forever start /node/server/path/server.js > /dev/null
আপনার কনফিগারেশন অনুসারে উপরের পাথগুলি সম্পাদনা করার বিষয়টি নিশ্চিত করুন!
৩. বাশ স্ক্রিপ্টটি কার্যকর করা যেতে পারে তা নিশ্চিত করুন।
chmod 700 /home/bob/node_server_init.sh
৪. বাশ স্ক্রিপ্টটি পরীক্ষা করুন।
sh /home/bob/node_server_init.sh
5. নোডের জন্য রানটাইম ব্যবহারকারীর সাথে "বব" প্রতিস্থাপন করুন।
crontab -u bob -e
6. অনুলিপি করুন এবং আটকান (পছন্দসই ব্যবহারকারীর কাছে বব পরিবর্তন করুন)।
@reboot /bin/sh /home/bob/node_server_init.sh
ক্রন্টব সংরক্ষণ করুন।
আপনি এটি শেষ পর্যন্ত করেছেন, আপনার পুরস্কারটি একটি রিবুট (পরীক্ষার জন্য) :)
সংযুক্ত প্রশ্ন থেকে উত্তর অনুলিপি করা হয়েছে ।
আপনি পিএম 2 ব্যবহার করতে পারেন , এটি বিল্ট ইন লোড ব্যালেন্সার সহ নোড.জেএস অ্যাপ্লিকেশনগুলির জন্য একটি উত্পাদন প্রক্রিয়া পরিচালক।
পিএম 2 ইনস্টল করুন
$ npm install pm2 -g
একটি অ্যাপ্লিকেশন শুরু করুন
$ pm2 start app.js
আপনি যদি এক্সপ্রেস ব্যবহার করেন তবে আপনি নিজের অ্যাপ্লিকেশনটি শুরু করতে পারেন
pm2 start ./bin/www --name="app"
সমস্ত চলমান প্রক্রিয়া তালিকাভুক্ত:
$ pm2 list
এটি সমস্ত প্রক্রিয়া তালিকাবদ্ধ করবে। তারপরে আপনি নিম্নলিখিত আদেশটি দিয়ে অ্যাপ্লিকেশনটির আইডি বা নাম ব্যবহার করে আপনার পরিষেবা বন্ধ / পুনঃসূচনা করতে পারেন।
$ pm2 stop all
$ pm2 stop 0
$ pm2 restart all
লগ প্রদর্শন করতে
$ pm2 logs ['all'|app_name|app_id]
$pm2 startup
এরপরে আপনি দেখতে পাবেন দুপুর ২ টা ম্যানুয়ালি একটি কমান্ড চালাতে বলছে, অনুলিপি করুন এবং এটি চালান। তারপরে, $pm2 save
এখন আপনার অ্যাপ্লিকেশন.জেগুলি সিস্টেম রিবুটগুলি থেকে বেঁচে থাকবে
তার জন্য আপনাকে /etc/init.d ফোল্ডারে শেল স্ক্রিপ্ট তৈরি করতে হবে। এটি কখনও কখনও জটিল না হয় যদি আপনি এটি কখনও না করেন তবে ওয়েবে init.d স্ক্রিপ্টগুলিতে প্রচুর তথ্য রয়েছে।
চিরকালের সাথে কফি স্ক্রিপ্ট সাইট চালানোর জন্য আমি এখানে একটি স্ক্রিপ্টের নমুনা নিলাম:
#!/bin/bash
#
# initd-example Node init.d
#
# chkconfig: 345
# description: Script to start a coffee script application through forever
# processname: forever/coffeescript/node
# pidfile: /var/run/forever-initd-hectorcorrea.pid
# logfile: /var/run/forever-initd-hectorcorrea.log
#
# Based on a script posted by https://gist.github.com/jinze at https://gist.github.com/3748766
#
# Source function library.
. /lib/lsb/init-functions
pidFile=/var/run/forever-initd-hectorcorrea.pid
logFile=/var/run/forever-initd-hectorcorrea.log
sourceDir=/home/hectorlinux/website
coffeeFile=app.coffee
scriptId=$sourceDir/$coffeeFile
start() {
echo "Starting $scriptId"
# This is found in the library referenced at the top of the script
start_daemon
# Start our CoffeeScript app through forever
# Notice that we change the PATH because on reboot
# the PATH does not include the path to node.
# Launching forever or coffee with a full path
# does not work unless we set the PATH.
cd $sourceDir
PATH=/usr/local/bin:$PATH
NODE_ENV=production PORT=80 forever start --pidFile $pidFile -l $logFile -a -d --sourceDir $sourceDir/ -c coffee $coffeeFile
RETVAL=$?
}
restart() {
echo -n "Restarting $scriptId"
/usr/local/bin/forever restart $scriptId
RETVAL=$?
}
stop() {
echo -n "Shutting down $scriptId"
/usr/local/bin/forever stop $scriptId
RETVAL=$?
}
status() {
echo -n "Status $scriptId"
/usr/local/bin/forever list
RETVAL=$?
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
restart
;;
*)
echo "Usage: {start|stop|status|restart}"
exit 1
;;
esac
exit $RETVAL
আমাকে নিশ্চিত করতে হয়েছিল যে ফোল্ডার এবং PATHs স্পষ্টরূপে সেট করা হয়েছে বা রুট ব্যবহারকারীর কাছে উপলভ্য ছিল যেহেতু init.d স্ক্রিপ্টগুলি রুট হিসাবে চালানো হয়।
পিএম 2 ব্যবহার করুন
সার্ভার প্রোডাকশন সার্ভার চালানোর জন্য সেরা বিকল্পটি
আপনার অ্যাপ্লিকেশনটি এভাবে চালানোর সুবিধা কী কী?
পিএম 2 ক্রাশ হয়ে গেলে আপনার অ্যাপ্লিকেশনটি স্বয়ংক্রিয়ভাবে পুনঃসূচনা করবে।
এই ক্ষেত্রে /home/safeuser/.pm2/logs/app-err.log এ একটি ফাইলের মধ্যে - পিএম 2 আপনার অযথিত ব্যতিক্রমগুলির একটি লগ রাখবে।
একটি কমান্ডের সাথে, পিএম 2 এটি নিশ্চিত করতে পারে যে সার্ভারটি পুনরায় বুট করার সময় এটি পরিচালনা করে এমন কোনও অ্যাপ্লিকেশন পুনরায় চালু হবে। মূলত, আপনার নোড অ্যাপ্লিকেশনটি পরিষেবা হিসাবে শুরু হবে।
রেফ: https://www.digitalocean.com/commune/tutorials/how-to-use-pm2-to-setup-a-node-js-pr Prod-- পরিবেশ-on-an-ubuntu- vps
পরিষেবা হিসাবে চলমান নোড অ্যাপ্লিকেশনগুলি পেতে সর্বদা তৈরি করা হয়নি। সঠিক পদ্ধতিটি হল একটি / etc / inittab এন্ট্রি (পুরানো লিনাক্স সিস্টেম) বা একটি আপস্টার্ট (নতুন লিনাক্স সিস্টেম) তৈরি করা।
এটি কীভাবে আপস্টার্ট হিসাবে সেট আপ করবেন সে সম্পর্কে এখানে কিছু ডকুমেন্টেশন রয়েছে: https://github.com/cvee/node-upstart
crontab
CentOS x86 6.5 এ আমার জন্য কাজ করে না। @ রিবুট মনে হচ্ছে কাজ করছে না।
অবশেষে আমি এই সমাধান পেয়েছি:
সম্পাদনা: /etc/rc.local
sudo vi /etc/rc.local
ফাইলের শেষে এই লাইনটি যুক্ত করুন। পরিবর্তনUSER_NAME
এবং PATH_TO_PROJECT
আপনার নিজের। NODE_ENV=production
মানে অ্যাপ্লিকেশনটি প্রডাকশন মোডে চলে। একাধিক নোড.জেএস অ্যাপ্লিকেশন চালানোর প্রয়োজন হলে আপনি আরও লাইন যুক্ত করতে পারেন।
su - USER_NAME -c "NODE_ENV=production /usr/local/bin/forever start /PATH_TO_PROJECT/app.js"
NODE_ENV
আলাদা লাইনে সেট করবেন না , আপনার অ্যাপ্লিকেশনটি এখনও ডেভলপমেন্ট মোডে চলবে, কারণ চিরকালের জন্য তা পায় না NODE_ENV
।
# WRONG!
su - USER_NAME -c "export NODE_ENV=production"
Vi সংরক্ষণ করুন এবং ছেড়ে দিন (টিপুন ESC : w q return
)। আপনি আপনার সার্ভারটি রিবুট করার চেষ্টা করতে পারেন। আপনার সার্ভারটি পুনরায় বুট করার পরে, আপনার নোড.জেএস অ্যাপ্লিকেশনটি স্বয়ংক্রিয়ভাবে চালিত হওয়া উচিত, এমনকি যদি আপনি কোনও অ্যাকাউন্টে দূরবর্তীভাবে এসএসএসের মাধ্যমে লগইন না করেন।
আপনি NODE_ENV
আপনার শেল ভাল পরিবেশ সেট করতে চাই । NODE_ENV
আপনার অ্যাকাউন্টটি স্বয়ংক্রিয়ভাবে সেট হয়ে যাবেUSER_NAME
লগ ইন ।
echo export NODE_ENV=production >> ~/.bash_profile
সুতরাং আপনি পুনরায় /PATH_TO_PROJECT/app.js
সেট NODE_ENV
না করে ssh এর মাধ্যমে চিরকালের জন্য বন্ধ / শুরু করার মতো কমান্ড চালাতে পারেন ।
আমি একটি স্ক্রিপ্ট লিখেছিলাম যা ঠিক এটি করে:
https://github.com/chovy/node-startup
আমি চিরকালের জন্য চেষ্টা করি নি, তবে আপনি যে আদেশটি চালাচ্ছেন তা আপনি নিজেরাই অনুকূলিত করতে পারেন, সুতরাং এটি সরাসরি হওয়া উচিত:
/etc/init.d/node-app start
/etc/init.d/node-app restart
/etc/init.d/node-app stop
আমি উপরের উত্তর প্রচুর চেষ্টা করেছিলাম। তাদের কেউই আমার পক্ষে কাজ করেনি। আমার অ্যাপ্লিকেশনটি /home
ব্যবহারকারীর হিসাবে ইনস্টল করা আছে , মূল হিসাবে নয়। সম্ভবত এটির অর্থ হ'ল যখন উপরে বর্ণিত শুরু স্ক্রিপ্টগুলি চালিত হয়, /home
এখনও মাউন্ট করা হয় না, সুতরাং অ্যাপটি শুরু হয় না not
তারপরে আমি ডিজিটাল মহাসাগরের এই নির্দেশাবলী পেয়েছি:
বর্ণিত হিসাবে পিএম 2 ব্যবহার করা খুব সহজ এবং পুরোপুরি কাজ করে: আমার ভার্চুয়াল সার্ভারগুলিতে দুটি শারীরিক ক্র্যাশ হয়েছিল - ডাউনটাইমটি ছিল মাত্র এক মিনিট।
Rc.local এর সমস্যাটি হ'ল কমান্ডগুলি রুট হিসাবে অ্যাক্সেস করা হয় যা ব্যবহারকারী হিসাবে লগ ইন এবং sudo ব্যবহারের চেয়ে পৃথক।
আমি প্রারম্ভকালীন কমান্ডগুলিতে ইত্যাদি / প্রোফাইল.d করতে চাইলে একটি .sh স্ক্রিপ্ট যুক্ত করে এই সমস্যার সমাধান করেছি। প্রোফাইল.d এ থাকা যে কোনও .sh ফাইল স্বয়ংক্রিয়ভাবে লোড হবে এবং কোনও কমান্ড এমন আচরণ করা হবে যেন আপনি নিয়মিত সুডো ব্যবহার করেছেন।
এটির একমাত্র খারাপ দিকটি নির্দিষ্ট ব্যবহারকারীর জন্য জিনিস শুরু করার জন্য লগিন করতে হবে যা আমার পরিস্থিতিতে সর্বদা ক্ষেত্রে ছিল।
সম্পূর্ণ উদাহরণ crontab (/ etc / crontab এ অবস্থিত) ..
#!/bin/bash
# edit this file with .. crontab -u root -e
# view this file with .. crontab -u root -l
# put your path here if it differs
PATH=/root/bin:/root/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
# * * * * * echo "executes once every minute" > /root/deleteme
@reboot cd /root/bible-api-dbt-server; npm run forever;
@reboot cd /root/database-api-server; npm run forever;
@reboot cd /root/mailer-api-server; npm run forever;