سؤال

في الوقت الحالي يجب أن أذهب إلى /usr/java/apache-solr-1.4.0/example ثم افعل:

java -jar start.jar

كيف يمكنني تشغيل هذا للبدء تلقائيًا عند التمهيد؟

أنا على خادم Linux المشترك.

هل كانت مفيدة؟

المحلول

إذا كان لديك وصول جذر إلى جهازك ، فهناك عدد من الطرق للقيام بذلك بناءً على تدفق تهيئة نظامك (البرامج النصية init ، systemd ، إلخ)

ولكن إذا لم يكن لديك جذر ، cron لديه طريقة نظيفة ومتسقة لتنفيذ البرامج عند إعادة التشغيل.

أولاً ، اكتشف مكان وجود جافا على جهازك. سيخبرك الأمر أدناه بمكان وجوده:

$ which java

بعد ذلك ، قم بتمسك الرمز التالي في برنامج نصي shell ، واستبدل مسار Java أدناه (/usr/bin) بالمسار الذي حصلت عليه من الأمر أعلاه.

#!/bin/bash

cd /usr/java/apache-solr-1.4.0/example
/usr/bin/java -jar start.jar

يمكنك حفظ هذا البرنامج النصي في مكان ما (على سبيل المثال ، $ home) كـ Start.sh. امنحه World Execute Execute (لتبسيط) عن طريق تشغيل الأمر التالي:

$ chmod og+x start.sh

الآن ، اختبر البرنامج النصي وتأكد من أنه يعمل بشكل صحيح من سطر الأوامر.

$ ./start.sh

إذا كان كل شيء يعمل بشكل جيد ، فأنت بحاجة إلى إضافته إلى أحد البرامج النصية لبدء التشغيل في جهازك. أبسط طريقة للقيام بذلك هي إضافة السطر التالي إلى نهاية /etc/rc.local.

# ... snip contents of rc.local ...
# Start Solr upon boot.
/home/somedir/start.sh

بدلاً من ذلك ، إذا لم يكن لديك إذن لتحرير RC.Local ، فيمكنك إضافته إلى مستخدمك Crontab على النحو. اكتب أولى ما يلي في سطر الأوامر:

$ crontab -e

هذا سوف يطرح محرر. أضف السطر التالي إليه:

@reboot /home/somedir/start.sh

إذا كان نظام Linux الخاص بك يدعمه (وهو ما يفعله عادةً) ، فسيضمن ذلك تشغيل البرنامج النصي عند بدء التشغيل.

إذا لم يكن لدي أي أخطاء مطبعية أعلاه ، فيجب أن تنجح بشكل جيد بالنسبة لك. أعلمني كيف سيسير الامر.

نصائح أخرى

نظرًا لأنك في صندوق Linux المشترك ، يجب عليك أن تطلب من مسؤول النظام القيام بما يلي ، ربما.

قم بإنشاء برنامج نصي بدء التشغيل في /etc/init.d/solr.

انسخ هذا الرمز ، البرنامج النصي لبدء تشغيل SOLR ، في هذا الملف:

#!/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

# 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..."

    # Start daemon
    daemon --chdir='/usr/local/solr/example' --command "java -jar start.jar" --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)
        restart
    ;;
    *)
        echo $"Usage: solr {start|status|stop|restart}"
        exit 3
    ;;
esac

exit $RETVAL

ثم اركض:

chkconfig -add solr

أو (على أوبونتو):

تحديث RC.D SOLR الافتراضيات

... أو ، إذا لم يكن توزيع Linux الخاص بك chkconfig (أو update-rc.d)، حلقة الوصل /etc/init.d/solr إلى /etc/rc3.d/S99solr و /etc/rc5.d/S99solr و /etc/rc3.d/K01solr و /etc/rc5.d/K01solr:

% ln -s /etc/init.d/solr /etc/rc3.d/S99solr

% ln -s /etc/init.d/solr /etc/rc5.d/S99solr

% ln -s /etc/init.d/solr /etc/rc3.d/K01solr

% ln -s /etc/init.d/solr /etc/rc5.d/K01solr

الآن على إعادة تشغيل SOLR سوف تبدأ في مستويات التشغيل 3 و 5 (وحدة التحكم مع الشبكة والكامل واجهة المستخدم الرسومية).

لبدء تشغيل Solr يدويًا:

% /etc/init.d/solr start

إضافة الأسطر التالية إلى بلدي /etc/init.d/solr يعمل الملف لدعم Red Hat Linux (قمت بنسخها من /etc/init.d/mysql بعد قراءة التعليقات من قبل الآخرين هنا).

# Comments to support chkconfig on Red Hat Linux
# chkconfig: 2345 64 36
# Description: A very fast and reliable search engine.

منذ الشرط هو تكرار الأقسام، استخدم مكتبة النماذج.هذا هو معايير # 1 الخاصة بي عند تمييز آلية استخدام (قائمة أو مكتبة).يعالج InfoPath أقسام تكرار بسهولة ويعتبر كيفية تخزين وإعادة تكرار قسم التكرار في قائمة أكثر مشكلة من قيمتها.

أجبت على هذا السؤال مرة واحدة بالفعل, ، ولكن هذه الإجابة كانت لأنظمة التشغيل التي استخدمت SYSV وهذا الأنظمة الجديدة التي تستخدمها بشكل متزايد بشكل متزايد Systemd.

كما في إجابتي الأخرى, ، هناك ثلاثة أشياء ستحتاج إليها هنا:

  1. قم بإنشاء البرنامج النصي ووضعه في المكان المناسب.
  2. اجعل البرنامج النصي يبدأ بشكل صحيح عند إعادة التشغيل.
  3. مكافأة: جعل systemd سجلات ثابتة.

1. إنشاء البرنامج النصي ووضعه في المكان المناسب

ها هو systemd ملف الوحدة الذي يمكنك استخدامه (هذه تحل محل ملفات SYSV init). أطلق عليه اسما solr.service.

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

[Service]
Type=simple
Environment="XMX=2G"
WorkingDirectory=/usr/local/solr/example
ExecStart=/usr/bin/java -jar -server -Xmx${XMX} start.jar
Restart=on-failure
LimitNOFILE=10000

[Install]
WantedBy=multi-user.target

لاحظ أن هناك تكوينًا هناك لذاكرة Solr. ربما تريد تعديل ذلك لأغراضك الخاصة. إذا كان لديك عدد من المتغيرات التي تمر بها systemd, ، يمكنك القيام بذلك مع EnvironmentFile التوجيه.

المزيد من الوثائق لهذه الملفات هنا.

2. اجعل بدء تشغيل البرنامج النصي بشكل صحيح عند التمهيد

هذا بسيط إلى حد ما ، ولكن هناك قواعد. لجعله يبدأ من التمهيد ، ضع الملف في /etc/systemd/system/solr.service. لا يمكنك استخدام Symlink في هذا الدليل ، لا تحاول.

بمجرد أن يكون هناك ، يمكنك تمكين الخفي من الجري في التمهيد مع:

sudo systemctl enable solr

ويمكنك البدء ، التوقف ، الحالة مع:

sudo systemctl {start|stop|status} solr

3. صنع systemd سجلات ثابتة

بشكل افتراضي، systemd السجلات ليست ثابتة وتضيع كلما قمت بإعادة تشغيل النظام. إذا لم يكن هذا ما تريده ، فيمكنك جعلها مستمرة من خلال إنشاء دليل:

sudo mkdir -p /var/log/journal/

ثم إعادة تشغيل systemd Daemon Journaling:

sudo systemctl restart systemd-journald

بمجرد اكتمال ذلك ، systemdخفي اليومية سيتلقى كل stdout و Stderr الذي ينشئه Solr وسيتم تخزينه تنسيق ثنائي تحت /var/log/journal/.

الطريقة systemd يعد التسجيل أنسحًا رائعًا ويستحق الدراسة إذا لم تكن على دراية به. في غضون ذلك ، فقط اعلم أنه لقراءة إدخالات السجل الخاصة بك ، ستحتاج إلى استخدام أداة جديدة تسمى journalctl. على سبيل المثال ، سيتبع ذلك سجلات SOLR الخاصة بك:

journalctl -u solr -f

وهناك أيضًا أعلام للقيام بالتصفية القائمة على التاريخ وأشياء من هذا القبيل.

3.1 تعديل ملفات السجل

قسم المكافأة! إذا كنت ترغب في تعديل ملفات السجل ، يمكنك اقرأ كل شيء عن ذلك في الوثائق هنا, ، لكن الإعدادات الافتراضية آمنة للغاية وذات عقلانية (يتم ضغط السجلات افتراضيًا ، ولا يمكن أن تنمو كبيرة جدًا ، وتكون محدودة في الأسعار ، وتتم كتابتها على القرص على دفعات).

اتبع تعليقات SuperMagic ، ثم اتبع هذا

http://codingrecipes.com/service-x-does-not-support-chkconfig

هو يقول،

1 – Copy your script into /etc/init.d folder
2 – cd /etc/init.d
3 – chmod +x myscript
4 – Add these lines, including #, right after #!/bin/bash or #!/bin/sh:

# chkconfig: 2345 95 20
# description: Some description
# What your script does (not sure if this is necessary though)
# processname: myscript

ثم يمكنك القيام به

chkconfig -myscript

البرنامج النصي init.d/solr الذي تم اختباره على CentOS 6/Amazon Linux. يلف CLI الأصلي SOLR.

#!/bin/bash
# description: Starts and stops Solr production


PIDFILE=/var/run/solr.pid
SOLR_HOME=/usr/share/solr
START_COMMAND="$SOLR_HOME/bin/solr start -p 8984 -noprompt -m 1g"
NAME="Solr"


start() {
  echo  "Starting $NAME"
  if [ -f $PIDFILE ]; then
    echo -n "$PIDFILE exists. $NAME may be running."
  else
    str=`$START_COMMAND`
    pid=`echo $str | grep -o "pid=[0-9]*" | grep -o "[0-9]*"`
    if [ "$pid" == "" ];
    then
      echo "[FATAL ERROR] Failed to extract pid. Exiting!"
      exit 1
    fi
    echo $pid > $PIDFILE
  fi
  return 0
}


case "$1" in
  start)
    start
  ;;
  stop)
    echo "Stopping $NAME .."
    $SOLR_HOME/bin/solr stop
    rm -f $PIDFILE
  ;;
  status)
    $SOLR_HOME/bin/solr status
  ;;
  restart)
    $0 stop
    #sleep 2
    $0 start
  ;;

  *)
    echo "Usage: $0 (start | stop | restart | status)"
    exit 1
    ;;

esac
exit $?

يفحص

man 5 crontab

انظر إذا @reboot مدعوم على نظام Linux الذي تستخدمه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top