আমার পুরানো আরআইপি স্ক্রিপ্টটি সিস্টেমে কাজ করার সহজ উপায় কী?


48

আমি একটি নতুন সিস্টেমড স্ক্রিপ্ট তৈরি করে সঠিক জিনিসটি করতে চাই না, আমি চাই এখন আমার পুরানো আরআইপি স্ক্রিপ্টটি আবার কাজ করবে যে আমি আমার সিস্টেমকে একটি ওএসে আপগ্রেড করেছি যা সিস্টেমড ব্যবহার করছে।

আমি কীভাবে init স্ক্রিপ্টগুলি রূপান্তর করতে পারি এবং সিস্টেমড স্ক্রিপ্টগুলি কীভাবে লিখব তা আমি সংক্ষেপে গবেষণা করেছি, তবে আমি নিশ্চিত যে এটি সঠিকভাবে শিখতে হবে এবং সঠিকভাবে এটি করতে আমার কয়েক ঘন্টা সময় নিতে পারে।

বর্তমান পরিস্থিতি হ'ল:

systemctl start solr
Failed to start solr.service: Unit solr.service failed to load: No such file or directory.

এবং:

sudo service solr start
Failed to start solr.service: Unit solr.service failed to load: No such file or directory.

এখনই, আমি কেবল কাজে ফিরে যেতে চাই want এটি আবার কাজ করার পক্ষে সর্বনিম্ন প্রতিরোধের পথ কী ?

আপডেট

আমি এগুলি সবই বোঝাতে চাইনি - আমি সত্যিই তা করি নি - তবে আমার আছে এবং আমি আমার প্রথম সূত্রটি বের করেছি:

sudo systemctl enable solr
Synchronizing state for solr.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d solr defaults
insserv: warning: script 'K01solr' missing LSB tags and overrides
insserv: warning: script 'solr' missing LSB tags and overrides
Executing /usr/sbin/update-rc.d solr enable
update-rc.d: error: solr Default-Start contains no runlevels, aborting.

Systemd হল জন্য অসামঞ্জস্যপূর্ণ পৃষ্ঠা বলছেন যে:

এলএসবি শিরোনাম নির্ভরতা সম্পর্কিত তথ্যগুলি। অনেক বিতরণের SysV বাস্তবায়নগুলি LSB init স্ক্রিপ্ট শিরোনামে এনকোডড নির্ভরতা তথ্য ব্যবহার করে না, বা কেবলমাত্র খুব সীমিত উপায়ে ব্যবহার করে। যে কারণে তারা প্রায়শই ভুল বা অসম্পূর্ণ থাকে। সিস্টেমড যাইহোক এই শিরোলেখগুলির পুরোপুরি ব্যাখ্যা করে এবং রানটাইমের সময় তাদের নিবিড়ভাবে অনুসরণ করে

আমি মনে করি এর অর্থ এটি স্থির না হওয়া পর্যন্ত আমার স্ক্রিপ্ট কাজ করবে না।

প্রশ্নে স্ক্রিপ্ট:

#!/bin/sh

# Prerequisites:
# 1. Solr needs to be installed at /usr/local/solr/example
# 2. daemon needs to be installed
# 3. Script needs to be executed by root
# 4. $INSTALL_ROOT must be set

# This script will launch Solr in a mode that will automatically respawn if it
# crashes. Output will be sent to /var/log/solr/solr.log. A pid file will be
# created in the standard location.

start () {
    echo -n "Starting solr..."

    # Reset ulimit or else get issues with too many open files (https://issues.apache.org/jira/browse/SOLR-4)
    ulimit -n 10000

    # start daemon
    daemon --chdir='/usr/local/solr/example' --command "java -jar -server start.jar -DINSTALL_ROOT=$INSTALL_ROOT" --respawn --output=/var/log/solr/solr.log --name=solr --verbose

    RETVAL=$?
    if [ $RETVAL = 0 ]
    then
        echo "done."
    else
        echo "failed. See error code for more information."
    fi
    return $RETVAL
}

stop () {
    # stop daemon
    echo -n "Stopping solr..."

    daemon --stop --name=solr  --verbose
    RETVAL=$?

    if [ $RETVAL = 0 ]
    then
        echo "done."
    else
        echo "failed. See error code for more information."
    fi
    return $RETVAL
}


restart () {
    daemon --restart --name=solr  --verbose
}


status () {
    # report on the status of the daemon
    daemon --running --verbose --name=solr
    return $?
}


case "$1" in
    start)
        start
    ;;
    status)
        status
    ;;
    stop)
        stop
    ;;
    restart)
        stop
        sleep 15
        start
    ;;
    *)
        echo $"Usage: solr {start|status|stop|restart}"
        exit 3
    ;;
esac

exit $RETVAL

"আমি সঠিক জিনিসটি করতে চাই না" আপনাকে প্রচুর নেতিবাচক প্রতিক্রিয়া জানাতে চলেছে। আশা করি আপনি আপনার হ্যাজমাট স্যুটটি দান করেছেন। যাইহোক, সর্বনিম্ন প্রতিরোধের পথ কিছুই নয় ; শুধু আপনার init স্ক্রিপ্ট ব্যবহার করুন।
মাইকেল হ্যাম্পটন

6
একদিন, অবশ্যই, আমি সঠিক জিনিস করব। তবে আমরা সীমিত সংস্থার বিশ্বে বাস করি। কী কাজ করছে না সে সম্পর্কে আমি আরও বিশদ যুক্ত করেছি, যেহেতু দৃশ্যত এটি ইতিমধ্যে কাজ করার কথা।
mlissner

আপনি কি উবুন্টুতে এটি করার চেষ্টা করছেন? Youশ্বর আপনাকে সাহায্য, কেন?
মাইকেল হ্যাম্পটন

1
আমি. এটা অন্য কোথাও খারাপ?
mlissner

1
উবুন্টুর অন্যান্য সমস্ত ব্যর্থতার মধ্যে, এখানে প্রাসঙ্গিকটি হ'ল আপস্টার্ট হ'ল ধর্মান্ধকর স্বপ্ন। এটা ভালো যে, তারা শেষ পর্যন্ত পরিত্রাণ করছি, কিন্তু আপনার init স্ক্রিপ্ট হিসাবে সত্যিই এটা সাথে সামঞ্জস্যপূর্ণ নয়। এটি পূর্বে কীভাবে কাজ করেছিল তা সম্ভবত (প্রাচীন) সিসভিভি সামঞ্জস্যের মাধ্যমে হয়েছিল এবং সিস্টেমড যখন এটি পরিচালনা করতে পারে তবে উবুন্টু স্পষ্টতই এটি ভেঙে দেওয়ার জন্য কিছু করেছে done আমি এই কাজটি করার চেষ্টা করার পরামর্শ দেব না, বিশেষত যেহেতু আপনি ইতিমধ্যে এটি ব্যয় করেছেন তার চেয়ে সিস্টেমড ইউনিট ফাইলটি লেখার জন্য আপনাকে অনেক কম সময় লাগত।
মাইকেল হ্যাম্পটন

উত্তর:


34

গুরুতরভাবে, একটি সিস্টেমড ইউনিট ফাইল এই জাতীয় ... বা বেশিরভাগ পরিষেবার জন্য একটি পরিষেবার জন্য লিখতে তুচ্ছ।

এটি আপনাকে সেখানে প্রায় 95% পথ পেতে হবে। এটি রাখুন, উদাহরণস্বরূপ,/etc/systemd/system/solr.service

[Unit]
Description=Apache Solr
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=simple
EnvironmentFile=/etc/courtlistener
WorkingDirectory=/usr/local/solr/example
ExecStart=/usr/bin/java -jar -server -Xmx${CL_SOLR_XMX} start.jar -DINSTALL_ROOT=${INSTALL_ROOT}
Restart=on-failure
LimitNOFILE=10000

[Install]
WantedBy=multi-user.target

লগ ফাইল এবং এ জাতীয় জিনিস যেমন এখানে নেই তা নোট করুন ; systemd স্বয়ংক্রিয়ভাবে পরিষেবাটির নামে পরিষেবার আউটপুট ক্যাপচার এবং লগ করবে।


5
ভাল, এটি আমাকে সারাদিন কমপক্ষে গ্রহণ করেছে এবং ট্যুইকড এবং কনফিগার করা এবং সবকিছু পেতে। systemdকিছু অদ্ভুততা রয়েছে যেমন এই স্ক্রিপ্টটির অবিচ্ছিন্ন লগ থাকবে না যদি আপনি এটি চালু না করেন। শেষ পর্যন্ত, এটি কাজ করছে এবং আপনার ধাক্কা আমার যা প্রয়োজন তা ছিল ধন্যবাদ।
mlissner

15

আমার জন্য এখানে প্রস্তাবিত অনুসারে শিরোনামটিতে ডিআইডি তথ্য ব্লকটি যুক্ত করা আরও সহজ ছিল :

#!/bin/sh
### BEGIN INIT INFO
# Provides:          solr
# Required-Start:    
# Required-Stop:     
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: solr
# Description:       solr
### END INIT INFO

তারপরে, মৃত্যুদন্ড কার্যকর করুন sudo systemctl enable solr


1
আপনার কোডটিতে আপনার টাইপ রয়েছে যা আমার মতো ছিল এবং আমার স্ক্রিপ্টটি কাজ করতে বাধা দিচ্ছিল (এভাবে কুখ্যাত "contains no runlevels, aborting"ত্রুটি পেয়ে ) যতক্ষণ না বুঝতে পেরেছি: আপনার দ্বিতীয় লাইনে তৃতীয় # অনুপস্থিত (এটি হওয়া উচিত ### BEGIN INIT INFO)। আমি বাজি ধরছি যে আপনার খুব কম ভোট কেন দেয় তাও ব্যাখ্যা করবে।
পেরে

1
উফ, আপনি ঠিক বলেছেন, সম্ভবত এটি অনুলিপি-অনুলিপি প্রক্রিয়ায় সরানো হয়েছে! (এখনই স্থির)
এডমাস্টার

7

Systemd সহ সোলার লিগ্যাসি আরআই স্ক্রিপ্টটি ব্যবহার করার জন্য আরও একটি সমাধান:

systemctl daemon-reload  
systemctl enable solr  
systemctl start solr  

1
তিনি ইতিমধ্যে এটি চেষ্টা করেছিলেন, এবং এটি কার্যকর হয়নি, কারণ উবুন্টু বগি।
মাইকেল হ্যাম্পটন

4

প্রদত্ত স্টার্ট স্ক্রিপ্টটি ব্যবহার করে সোলার চালানো আরও সুবিধাজনক ।

সিস্টেমেড ইউনিট ফাইলটি দেখতে এমন দেখাচ্ছে:

[Unit]
Description=Apache Solr for Nextcloud's nextant app fulltext indexing
After=syslog.target network.target remote-fs.target nss-lookup.target systemd-journald-dev-log.socket
Before=nginx.service

[Service]
Type=forking
User=solr
WorkingDirectory=/path/to/solr/server
ExecStart=/path/to/solr/bin/solr start
ExecStop=/path/to/solr/bin/solr stop
Restart=on-failure

[Install]
WantedBy=multi-user.target

মনে রাখবেন যে, আপনার কাছে জুড়ে আপনার এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করতে পারে EnvironmentFileথেকে [Service]অধ্যায়। স্ক্রিপ্টটি bin/solrপরিবেশের পরিবর্তনগুলিকে সম্মান করে, কেবল এটি দেখুন।


আজ এটা ঠিক আছে। প্রশ্নটি মূলত লেখার সময় সলারের জন্য সরবরাহিত সিস্টেমড ইউনিট ছিল না।
মাইকেল হ্যাম্পটন

1

দেবিয়ানের উপর পরীক্ষিত: স্ক্রিপ্টের শুরুতে '_SYSTEMCTL_SKIP_REDIRECT = OHYES' যুক্ত করুন।

সিস্টেমড ফ্যানবয়গুলি এটি পছন্দ নাও করতে পারে তবে আরে, আমি সিস্টেমড পছন্দ করি না, তাই :)।


বা SYSTEMCTL_SKIP_REDIRECT=trueরেডহ্যাটে
ওথিয়াস

আমার জন্য কাজ করেনি :(
ইডমাস্টার

নিশ্চিত করুন যে আপনি যোগ করুন _(আন্ডারস্কোর) আগের SYSTEMCTL, এরকম: _SYSTEMCTL_SKIP_REDIRECT=1। আপনি যদি কমান্ডলাইন থেকে এটি চেষ্টা করে থাকেন তবে আপনাকে সেই বৈচিত্র্য রফতানি করতে হবে।
টিম্বুর

1

সেন্টোস on এ একটি এলএসবি আরআই স্ক্রিপ্টটি ব্যবহার করার চেষ্টা করার সময় আমার একই ত্রুটি হয়েছিল R একবার আসল অনুলিপি সঙ্গে প্রতিস্থাপন, সবকিছু ঠিকঠাক কাজ।


আমার স্ক্রিপ্টের ক্ষেত্রেও এটি হতে পারে।
mlissner
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.