วิธีการเพิ่มสคริปต์เพื่อเริ่มต้นและปิดในเดเบียน?


12

ผลรวมของชื่อค่อนข้างมาก

ฉันจะเพิ่ม startup.sh และ shutdown.sh ของแอพเซิร์ฟเวอร์ของฉันไปยังลำดับการเริ่มต้นและปิดระบบของ Debian OS ได้อย่างไร

คำตอบ:


15

ใน Debian, /etc/init.d/บริการและแอปพลิเคบูตและปิดสคริปต์ควรจะวางลง

Debian มีสคริปต์ตัวอย่าง/etc/init.d/skeletonที่คุณสามารถปรับเปลี่ยนตามรสนิยมของคุณสำหรับแอปพลิเคชันเฉพาะของคุณ

เมื่ออยู่ในสถานที่โทร:

# update-rc.d YOURAPP defaults

หากต้องการให้ Debian เพิ่ม/etc/rc?.d/symlink ให้คุณ

หากคุณต้องการเมนูหรือส่วนต่อประสานกราฟิกดูที่sysv-rc-confหรือksysvแพ็คเกจ


4

คุณสามารถเรียกสคริปต์ของคุณได้จาก/etc/rc.localก่อนถึงบรรทัดที่ระบุว่าexit 0

สำหรับการปิดแอปของคุณผมจะแนะนำให้วางสคริปต์ใน/etc/rc0.d คุณต้องตั้งชื่อด้วยตัวพิมพ์ใหญ่Kจากนั้นตัวเลข 2 หลักซึ่งระบุลำดับการเรียกใช้สคริปต์เหล่านี้แล้วชื่อ มันจะถูกเรียกด้วยพารามิเตอร์ "หยุด" แต่คุณสามารถละเว้นนี้สำหรับสคริปต์หยุดง่าย


ทำไมคุณต้องใช้ rc.local ในการทำซอฟแวร์กับ /etc/rcX.d?
womble

rc.local เป็นสถานที่ที่เหมาะสมสำหรับการเริ่มต้นง่ายๆไม่จำเป็นต้องจัดการกับพารามิเตอร์เริ่ม / หยุด ฯลฯ แต่มันไม่สามารถปิดกระบวนการได้ เนื้อหาของ rc0.d นั้นค่อนข้างแฮ็ค
Brent

3

สำหรับการเริ่มต้นมีลักษณะที่นี้

สำหรับการปิดระบบให้สร้างลิงค์ / คัดลอกสคริปต์ของคุณไปยังหนึ่งในโฟลเดอร์ /etc/rcX.d โดยที่ X คือ runlevel ที่คุณต้องการให้รัน 0 คือระดับการปิดระบบสำหรับเดเบียนฉันเชื่อว่า


นี่คือข้อมูลการปิดเครื่องที่ฉันต้องการ ขอบคุณสำหรับสิ่งนี้ @squillman
harperville

1

วิธีที่ง่ายที่สุดคือการแก้ไขสคริปต์ที่มีอยู่ทำงานในระบบของฉันใช้สำหรับเสียง :)

  • เริ่มต้น, แก้ไข/etc/init.d/rc.local, เพิ่ม sh ของคุณในตอนท้ายของไฟล์ก่อน: (มันจะดำเนินการได้ก่อนที่จะเข้าสู่ระบบ "หน้าจอ")
  • ปิด, แก้ไข/etc/init.d/halt, เพิ่ม sh ของคุณที่จุดเริ่มต้นของไฟล์หลังจากความคิดเห็นเริ่มต้น (มันจะถูกดำเนินการก่อนคำสั่งปิดจริงที่เรียกว่าโดยไฟล์สคริปต์นี้
  • รีบูตเช่นเดียวกับการปิด แต่ใน /etc/init.d/reboot

1

ตั้งแต่ Debian Jessie initโปรแกรมเก่าได้ถูกแทนที่ด้วยsystemd!

ลองดูด้วยตัวคุณเอง เรียกใช้: ls -l /sbin/initและดูสิ่งที่ชี้ไป วันนี้มันชี้ไปที่systemd( /sbin/init -> /lib/systemd/systemd) ซึ่งเป็นโปรแกรมเริ่มต้นใหม่และดีกว่า


ดังนั้นทางเลือกและคำตอบอื่น ๆ ที่นี่อยู่ในขณะนี้ล้าสมัย !!!


* ในขณะที่คุณยังคงสามารถติดตั้งสคริปต์แบบเดิมด้วยเครื่องมือ System-V แต่ก็ไม่ควรพูดโดยทั่วไป

man systemd.service พูดว่า: *

หากมีการร้องขอบริการภายใต้ชื่อที่แน่นอน แต่ไม่พบไฟล์การกำหนดค่าหน่วย systemd จะค้นหาสคริปต์เริ่มต้น SysV ด้วยชื่อเดียวกัน ... และสร้างหน่วยบริการจากสคริปต์นั้นแบบไดนามิก สิ่งนี้มีประโยชน์สำหรับความเข้ากันได้กับ SysV โปรดทราบว่าความเข้ากันได้นี้ค่อนข้างครอบคลุม แต่ไม่ถึง 100%


สำหรับระบบ Debian ที่ใหม่กว่า (เช่น Jessie, Stretch, Buster, ฯลฯ ... )

ง่ายกว่าที่คุณคิด (-:

ต่อไปนี้เป็นวิธีการใหม่และเป็นที่นิยมในการติดตั้งโปรแกรมบูตเครื่องหรือปิดเครื่อง

กับsystemdครั้งแรกที่คุณต้องการที่จะสร้างไฟล์หน่วย ไฟล์หน่วยส่วนใหญ่เป็นการประกาศไม่ใช่รหัส

จากนั้นคุณจะใช้systemctlคำสั่งเพื่อเปิดใช้งานหรือเริ่มหน่วยนั้น

systemdทำงานมากสำหรับคุณทำให้ง่ายเช่นมีโปรแกรมที่สำคัญเริ่มต้นใหม่โดยอัตโนมัติหากมันล้มเหลวหรือถูกฆ่าตาย นอกจากนี้มันจะปิดโปรแกรมของคุณเมื่อใดที่ควรจะเป็นค่าเริ่มต้นโดยไม่มีการทำงานพิเศษในส่วนของคุณ


เริ่มเรียนรู้เกี่ยวกับsystemdที่นี่:

จาก Debianและอื่น ๆและฯลฯ และฯลฯ


หน้าคนที่จะเริ่มต้นด้วย:

man systemd.unit - เกี่ยวกับไฟล์หน่วยโดยทั่วไป
man systemd.service - เกี่ยวกับไฟล์หน่วยบริการเช่น daemons และโปรแกรมที่รันครั้งเดียว

man systemctl - ส่วนต่อประสานผู้ใช้บรรทัดคำสั่ง
man journalctl- ดูบันทึกการทำงานของ systemd

man systemd - เกี่ยวกับโปรแกรม init เอง


นอกจากนี้ยังมีไฟล์ประเภทอื่น ๆ อีกมากมายเช่น

man systemd.target - สำหรับกลุ่มและเป้าหมายที่ซิงค์ทั่วไป

เมื่อคุณสรุปข้อมูลเบื้องต้นด้านบนแล้วขุดด้วยman -k systemdเพื่อค้นหาหน้าคนอื่นที่เกี่ยวข้อง



ไม่ว่าคุณจะทำอะไรบน Debian อย่าใช้สิ่งเหล่านี้ :

  • update-rc.d - ติดตั้งและลบลิงค์สคริปต์เริ่มต้น System-V สไตล์
  • sysv-rc-conf - การกำหนดค่าระดับ Run สำหรับ SysV เช่นลิงค์สคริปต์ init
  • runlevel - พิมพ์ระดับ run Svel ก่อนหน้าและปัจจุบัน
  • BUM- B oot U p M anager - โปรแกรมแก้ไข runlevel แบบกราฟิก
  • systemadm- ส่วนหน้าแบบกราฟิกสำหรับ systemd systemd และผู้จัดการบริการ
    (BTW ผู้เขียนบอกฉันทางอีเมลว่าตอนนี้มันพังมากเกินไป)


ตัวอย่าง:

ไฟล์หน่วยนี้เริ่มทำงาน NoIP.com daemon เมื่อฉันบูตเครื่องและปิดเครื่องเมื่อฉันปิดระบบ

ภูตนี้จากเวลาที่ส่งที่อยู่ IP ปัจจุบันของฉันเพื่ออัปเดตของฉัน DDNS ( DแบบไดนามิกDNS ( D omain N AME S erver)) ของผู้ให้บริการฐานข้อมูลจึงทำให้ชื่อโดเมนของฉันชี้ที่คอมพิวเตอร์ของฉันทุกที่ที่เดินทางไป

ไฟล์หน่วยนี้อยู่ในระบบของฉันในไฟล์การตั้งค่านี้: /etc/systemd/system/noip2.service

นี่คือสิ่งที่อยู่ในไฟล์หน่วย:

#   Comments can only go at the beginning of the line!

[Unit]
Description=Start the NoIP IP update daemon.  This runs every 30 minutes and reports our current IP to NoIP.com to update Love2d.ddns.net.
Documentation=https://no-ip.com/
Documentation=file:///nobak/Installers/NoIP/noip-2.1.9-1/README.FIRST


[Service]
# 'forking' because process returns after starting daemon (traditional unix daemon).
Type=forking

# This program runs and returns, leaving the running daemon
ExecStart=/usr/local/bin/noip2

# Be in no hurry to start this.  Max nice is +19.
Nice=15

# If it dies for any reason, then restart it
Restart=always


[Install]
# Installs a hook to use this unit file when the system boots or shuts down
WantedBy=multi-user.target

เรียกใช้ไฟล์หน่วยด้วยตนเอง (เช่นสำหรับการทดสอบ):

  • เริ่มต้น$ sudo systemctl start noip2ด้วย
  • เริ่มต้นใหม่$ sudo systemctl restart noip2กับ
  • หยุด$ sudo systemctl stop noip2กับ

กำหนดค่าระบบให้เรียกใช้ไฟล์หน่วยโดยอัตโนมัติเมื่อเริ่มต้นหรือปิดระบบ:

  • เริ่มใช้$ sudo systemctl enable noip2กับ
  • ยุติการใช้$ sudo systemctl disable noip2กับ

ดูบันทึก

  • $ sudo journalctl -u noip2
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.