วิธีทำให้ไฟล์ jar ทำงานเมื่อเริ่มต้น & และเมื่อคุณออกจากระบบ


30

ฉันไม่รู้ว่าจะเริ่มมองหาที่ไหนดี ฉันอ่านเกี่ยวกับภูตแล้วและไม่เข้าใจแนวคิด

รายละเอียดเพิ่มเติม :

  • ฉันเขียนโปรแกรมรวบรวมข้อมูลซึ่งไม่เคยหยุดนิ่งและรวบรวมข้อมูลผ่าน RSS ในอินเทอร์เน็ต
  • โปรแกรมรวบรวมข้อมูลได้รับการเขียนด้วยภาษาจาวาดังนั้นจึงเป็นไหในตอนนี้
  • ฉันเป็นผู้ดูแลระบบบนเครื่องที่มี Ubuntu 11.04
  • มีโอกาสที่เครื่องจะพังดังนั้นฉันต้องการให้โปรแกรมรวบรวมข้อมูลทำงานทุกครั้งที่คุณเริ่มต้นเครื่อง
  • นอกจากนี้ฉันต้องการให้มันทำงานต่อไปแม้ในขณะที่ฉันออกจากระบบ ฉันไม่แน่ใจว่าเป็นไปได้ แต่ส่วนใหญ่ฉันออกจากระบบแล้วและยังต้องการรวบรวมข้อมูล

ความคิดใด ๆ ใครบางคนชี้ให้ฉันในทิศทางที่ถูกต้อง?

แค่มองหาทางออกที่ง่ายที่สุด

คำตอบ:


32

นี่เป็นวิธีง่ายๆในการใช้ SysVInit คำแนะนำ:

  1. สร้างสคริปต์เริ่มต้นและหยุดของแอปพลิเคชันของคุณ วางไว้ในไดเรกทอรีในตัวอย่างของเราคือ:

    • เริ่มสคริปต์: /usr/local/bin/myapp-start.sh
    • สคริปต์หยุด: /usr/local/bin/myapp-stop.sh

    แต่ละคนจะให้คำแนะนำในการเรียกใช้ / หยุดแอพ ตัวอย่างเช่นmyapp-start.shเนื้อหาอาจเป็นเรื่องง่ายดังต่อไปนี้:

    #!/bin/bash
    
    java -jar myapp.jar 

    สำหรับสคริปต์หยุดอาจเป็นดังนี้:

    #!/bin/bash
    # Grabs and kill a process from the pidlist that has the word myapp
    
    pid=`ps aux | grep myapp | awk '{print $2}'`
    kill -9 $pid
  2. สร้างสคริปต์ต่อไปนี้ ( myscript) /etc/init.dและใส่ไว้ใน

    /etc/init.d/myscript เนื้อหา:

    #!/bin/bash
    # MyApp
    #
    # description: bla bla
    
    case $1 in
        start)
            /bin/bash /usr/local/bin/myapp-start.sh
        ;;
        stop)
            /bin/bash /usr/local/bin/myapp-stop.sh
        ;;
        restart)
            /bin/bash /usr/local/bin/myapp-stop.sh
            /bin/bash /usr/local/bin/myapp-start.sh
        ;;
    esac
    exit 0
  3. วางสคริปต์เพื่อเริ่มต้นด้วยระบบ (ใช้ SysV) เพียงรันคำสั่งต่อไปนี้ ( เป็น root ):

    update-rc.d myscript defaults 

PS: ฉันรู้ว่าพุ่งพรวดยอดเยี่ยมและบลา bla แต่ฉัน preffer ระบบ init SysV เก่า


1
แต่ระบบจะรู้ได้อย่างไรว่าจะใช้พารามิเตอร์ใด วิธีการตั้งค่าให้เป็น "เริ่มต้น" พยายามที่นี่และมันไม่ทำงาน
John John Pichler

1
ใช้งานได้ แต่คำสั่ง "service myapp start" ไม่ออกจากคำสั่ง
Tobia

ตอนนี้วิธีการใช้ตัวเลือกเริ่มต้น | หยุด | รีสตาร์ทใน myscript?
Codevalley

นอกจากนี้แม้หลังจากทำตาม 3 ขั้นตอนแล้วโถของฉันก็ไม่ได้ทำงานเมื่อเริ่มต้น คุณแน่ใจหรือว่าเราต้องเปลี่ยนการอนุญาตหรือเส้นทางหรืออะไรทำนองนั้น
Codevalley

@Codevalley ตามที่ได้กล่าวมาวิธีการนี้ใช้สำหรับ SysV init ในการใช้บริการหรือคำสั่งอื่นคุณจะต้องเขียนงานที่เริ่มต้นขึ้น แต่ถ้าคุณกำลังจะทำสิ่งนี้คุณควรเขียน systemd หนึ่ง (เนื่องจากกำลังจะกลายเป็นมาตรฐาน)
Marcos Rorizo ​​n จูเนียร์

6

ใช่ มันเป็นไปได้. :) พุ่งพรวดเป็นวิธีที่จะไปเพื่อให้แน่ใจว่าบริการยังคงทำงานอยู่ มันมีห้าแพคเกจติดตั้งทั้งหมดโดยค่าเริ่มต้น:

  • พุ่งพรวด init daemon และยูทิลิตี้ initctl
  • upstart-logd จัดเตรียม logd daemon และไฟล์นิยามงานสำหรับบริการ logd
  • upstart-compat-sysv จัดเตรียมไฟล์นิยามงานสำหรับงาน rc และเครื่องมือรีบูต, runlevel, shutdown และ telinit ที่ให้ความเข้ากันได้กับ SysVinit
  • startup-task จัดเตรียมไฟล์นิยามงานสำหรับงานเริ่มต้นระบบ
  • system-services จัดเตรียมไฟล์นิยามงานสำหรับบริการ tty

การเรียนรู้เป็นเรื่องสนุกและคุ้มค่า พุ่งพรวดมีเว็บไซต์: http://upstart.ubuntu.com/


จากเว็บไซต์ Upstart ในปี 2019: "Project อยู่ในโหมด maintaince เท่านั้นไม่มีการพัฒนาคุณสมบัติใหม่และคำแนะนำทั่วไปคือการย้ายไปยังระบบเริ่มต้นระบบขั้นต่ำหรือ systemd อื่น"
Nav

2

3 คำแนะนำด่วน ...

  1. สร้างSสคริปต์ทาร์ตใน/etc/rc3.d(โหมดคอนโซลผู้ใช้หลายคน) สอดคล้องกับKสคริปต์ป่วยใน/etc/rc.0และ/etc/rc6.dจะฆ่าโปรแกรม Java ของคุณในทางที่ควบคุมเมื่ออำนาจระบบลง (runevel 0) หรือเรียบ (runlevel 6) ดูแนะนำให้รู้จักกับ runlevels

    คุณอาจเริ่มต้นแอป Java ของคุณใน runlevel 2 (rc2.d) ได้ แต่ในฐานะโปรแกรมรวบรวมข้อมูลมันจะต้องใช้ TCP / IP ดังนั้นตรวจสอบให้แน่ใจว่าบริการเครือข่ายของคุณพร้อมใช้งาน / เริ่มทำงานใน runlevel 2 ของคุณล่วงหน้า ระบบเครือข่ายขึ้นอยู่ใน runlevel 3

    /etc/init.dมีสคริปต์เริ่ม / หยุดที่แท้จริงทั้งหมด /etc/rcN.dไดเรกทอรีเพียงแค่มีลิงค์ไปยังพวกเขานำหน้าด้วย S หรือ K เพื่อเริ่มต้นหรือฆ่าพวกเขาตามลำดับต่อ Runlevel N

  2. กระบวนการที่ดำเนินการโดยcrondควรคงอยู่ระหว่างการออกจากระบบ อาจเพิ่มลงใน crontab ของคุณ

  3. กระบวนการที่ทำงานด้วยnohupควรมีอยู่เช่นกัน ดูnohup: เรียกใช้คำสั่งแม้หลังจากที่คุณออกจากระบบ

    $ nohup java -jar myapp.jar &

    โดยปกติแล้วmyapp.jarเอาต์พุตมาตรฐานจะไปที่ไฟล์ชื่อ./nohup.outหรือ$HOME/nohup.outถ้าไฟล์เดิมไม่สามารถเขียนได้


และเมื่อฉันออกจากระบบจะยังคงทำงานบนพื้นหลังหรือไม่
RanZilber

0

ระวังเมื่อใช้งานด้วย:

  update-rc.d myscript defaults 

ในการมีสิทธิ์ 0755 และใช้หรือรับก่อน. sh เส้นทางของคุณ สมมติว่าสคริปต์ของคุณอยู่ใน /root/test.sh แรกคุณควรเปลี่ยนแผ่นซีดีก่อนที่จะเข้าถึง/root/test.sh

ดังนั้นวิธีที่ดีที่สุดคือการทำให้ SH บน init.d และเปลี่ยนเส้นทางของคุณshและดำเนินการในฟังก์ชั่นเริ่มต้น



0

supervisordวิธีที่ง่ายที่สุดคือการใช้งาน โปรดดูรายละเอียดแบบเต็มได้ที่http://supervisord.org/

คุณสามารถดูรายละเอียดเพิ่มเติมได้ที่นี่:

การรันไฟล์ jar ที่สามารถเรียกทำงานได้เมื่อระบบเริ่มทำงาน

https://www.digitalocean.com/community/tutorials/how-to-install-and-manage-supervisor-on-ubuntu-and-debian-vps

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