كيف تبدأ SOLR تلقائيًا؟
سؤال
في الوقت الحالي يجب أن أذهب إلى /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.
كما في إجابتي الأخرى, ، هناك ثلاثة أشياء ستحتاج إليها هنا:
- قم بإنشاء البرنامج النصي ووضعه في المكان المناسب.
- اجعل البرنامج النصي يبدأ بشكل صحيح عند إعادة التشغيل.
- مكافأة: جعل
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 الذي تستخدمه.