পটভূমি প্রক্রিয়া হিসাবে একটি সার্ভারে জাভা জার ফাইল চালান


105

দুটি অ্যাপ্লিকেশনের মধ্যে যোগাযোগ করার জন্য সার্ভারে আমার একটি জাভা জার চালানো দরকার। এটি চালানোর জন্য আমি দুটি শেল স্ক্রিপ্ট লিখেছি, তবে একবার আমি এই স্ক্রিপ্টটি শুরু করার পরে আমি প্রক্রিয়াটি বন্ধ করতে / শেষ করতে পারি না। আমি যদি ctrl+ টিপুন Cবা কনসোলটি বন্ধ করি তবে সার্ভারটি বন্ধ হয়ে যাবে। একজন সাধারণ সার্ভার হিসাবে চালাতে এই স্ক্রিপ্টটি কীভাবে সংশোধন করবেন আমাকে কেউ সাহায্য করতে পারেন?

 #!/bin/sh
java -jar /web/server.jar
echo $! 
#> startupApp.pid

উত্তর:


242

আপনি এটি চেষ্টা করতে পারেন:

#!/bin/sh
nohup java -jar /web/server.jar &

& প্রতীক, ব্যাকগ্রাউন্ডে চলার জন্য প্রোগ্রামটি স্যুইচ করে।

নোহুপ ইউটিলিটি আপনাকে লগ আউট করার পরেও পটভূমিতে চালিত আর্গুমেন্ট হিসাবে কমান্ডটি পাস করে তোলে।


ধন্যবাদ অ্যান্টন, ত্রুটিযুক্তভাবে আমি আইডিটি প্রসেসটি দিয়ে সার্ভারটি থামিয়ে দিচ্ছি i
বার্নাদ আলি 25'12

3
সংক্ষিপ্ত উত্তর: এটি সার্ভারের উপর নির্ভর করে। দীর্ঘ উত্তর: যতদূর আমি জানি, প্রক্রিয়াটি যেমন করুণাময় শাট ডাউনকে সমর্থন না করে কোনও প্রক্রিয়া বন্ধ করার কোনও নিরাপদ উপায় নেই। উদাহরণস্বরূপ, যদি এটি কোনও ওয়েব সার্ভারটি বাহ্যিক সংকেত দ্বারা সমাপ্ত হয় তবে সর্বদা কিছু অনুরোধ হারিয়ে যাওয়ার সম্ভাবনা থাকে। এই সমস্যাটি সমাধান করার একটি উপায় হ'ল সার্ভারে নিজেই একটি গ্রেফিউস টার্মিনেশন ফাংশন বাস্তবায়ন করা, উদাহরণস্বরূপ একটি বিশেষ ধরণের অনুরোধগুলি প্রক্রিয়া করে by তারপরে, সার্ভারটি সেই বিশেষ ধরণের অনুরোধ প্রেরণ করে শেষ করা যায়। অন্যথায়, প্রক্রিয়াটিকে তার আইডি দিয়ে হত্যা করা সহজ উপায়।
আন্তন বেলোগ্লাজভ

1
ব্যবহার nohupসবসময় স্পষ্টভাবে stdout এবং stderr পুনর্নির্দেশের সাথে একত্রিত করা উচিত - অন্যথায়, আপনি লগগুলি কোথায় চলে যায় তার নিয়ন্ত্রণ পাবেন না এবং nohup.outএই স্ক্রিপ্টটি যে কোনও ডিরেক্টরিতে ডাকা হবে তা কোনও কুরুচিপূর্ণ তৈরির সাথে শেষ হবে ।
চার্লস ডাফি

@ অ্যান্টন যখন আমি এসএসএইচ এক্সইসি রানজার.শ এর সাথে একটি স্ক্রিপ্ট (ঠিক আপনার উত্তরের মতো) চালাব। এটি আমার স্থানীয় টার্মিনালে লগগুলি স্ট্রিম করা শুরু করেছিল এবং যদি আমার টার্মিনালটি বন্ধ করে দেয় তবে আমার জারটি মারা যাবে। আমি কীভাবে এসএসএইচ এক্সেক ব্যবহার করে পটভূমিতে একটি জার চালাতে পারি?
আতিথ রাজেন্দ্রান

47

সিস্টেমড যা এখন সংখ্যাগরিষ্ঠ ডিস্ট্রোজে চলে

ধাপ 1:

আপনার ব্যবহারকারীর সংজ্ঞায়িত পরিষেবাগুলি আমার ছিল তা সন্ধান করুন /usr/lib/systemd/system/

ধাপ ২:

আপনার প্রিয় পাঠ্য সম্পাদকের নাম সহ এটি একটি টেক্সট ফাইল তৈরি করুন whatever_you_want.service

ধাপ 3:

ফাইলটি নিম্নলিখিত টেমপ্লেট রাখুন whatever_you_want.service

[Unit]
Description=webserver Daemon

[Service]
ExecStart=/usr/bin/java -jar /web/server.jar
User=user

[Install]
WantedBy=multi-user.target

পদক্ষেপ 4:

সুপার ব্যবহারকারী হিসাবে আপনার পরিষেবা চালান

$ systemctl start whatever_you_want.service # starts the service
$ systemctl enable whatever_you_want.service # auto starts the service
$ systemctl disable whatever_you_want.service # stops autostart
$ systemctl stop whatever_you_want.service # stops the service
$ systemctl restart whatever_you_want.service # restarts the service

এটি করার আধুনিক উপায় এটি
আর্থমাইন্ড

4
আমি উবুতুনু ছবিতে আমাকে সিস্টেমে ইনস্টল করতে হয়েছিল তখন ছবিটি / etc / systemd / system / এ পাওয়া গেল
রব্বো_উকে

29

আপনি যদি উবুন্টু ব্যবহার করেন এবং "আপস্টার্ট" ( http://upstart.ubuntu.com/ ) থাকে তবে আপনি এটি চেষ্টা করতে পারেন:

সৃষ্টি /var/init/yourservice.conf

নিম্নলিখিত বিষয়বস্তু সহ

description "Your Java Service"  
author "You"  

start on runlevel [3]  
stop on shutdown  

expect fork  

script     
    cd /web 
    java -jar server.jar >/var/log/yourservice.log 2>&1  
    emit yourservice_running  
end script  

এখন আপনি আদেশ service yourservice startএবং service yourservice stopআদেশ জারি করতে পারেন । /var/log/yourservice.logএটি কাজ করছে কিনা তা যাচাই করতে আপনি লেজ দিতে পারেন ।

যদি আপনি কনসোল উইন্ডোটি হগিং না করে কনসোল থেকে আপনার জারটি চালাতে চান তবে আপনি কেবল এটি করতে পারেন:

java -jar /web/server.jar > /var/log/yourservice.log 2>&1

3
এটা কি সিস্টেমড সার্ভিস? এই প্রশ্নটি লিনাক্সকে ট্যাগ করা হয়নি এবং খুব কম কিছু ডিস্ট্রো ডিফল্টরূপে সিস্টেমে রয়েছে।
জর্ডানম

1
আমি প্রশ্নটি সংশোধন করে বলব যে এটি উবুন্টুতে অন্তর্ভুক্ত করা "আপস্টার্ট" ব্যবহার করছে।
স্ট্রলোক

1
আমি সর্বশেষ পরামর্শের জন্য বিশ্বাস করি যদি আপনি এটি পটভূমিতে চালিত করতে চান এবং শেলটি মুক্তি পেয়েছে, আপনার করা উচিত: java -jar /web/server.jar > /var/log/yourservice.log 2>&1 &
মন্টারো

ডিফল্টরূপে সমস্ত সিস্টেমের কাজ নিম্নলিখিত ডিরেক্টরিতে লাইভ থাকে: / etc / init / ... ডিফল্টরূপে, উবুন্টুতে 14.04 -তে কোনও / var / init / ডিরেক্টরি নেই।
মাইকেল লাফায়েট

এছাড়াও, কোনও পরিষেবা শুরু করার জন্য "সুডো" প্রয়োজন। sudo পরিষেবা আপনার পরিষেবা শুরু করুন
মাইকেল লাফায়েট

2

ব্যাকগ্রাউন্ডে চালান এবং নিম্নলিখিত ব্যবহার করে লগ ইন লগ যোগ করুন:

nohup java -jar /web/server.jar > log.log 2>&1 &
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.