ไม่สามารถเริ่ม <myapp> .service: ไม่พบยูนิต <myapp> .service


13

ฉันสร้างสคริปต์ init.d ขั้นพื้นฐานสุดสำหรับ ธ ธ ธ ท ธ ของฉัน:

#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....

# Source function library.
. /etc/init.d/functions

start() {
    echo "starting torbot"
    python /home/ctote/dev/slackbots/torbot/torbot.py
    # example: daemon program_name &
}

stop() {
    # code to stop app comes here
    # example: killproc program_name
}

case "$1" in
    start)
       start
       ;;
    stop)
       stop
       ;;
    restart)
       stop
       start
       ;;
    status)
       # code to check status of app comes here
       # example: status program_name
       ;;
    *)
       echo "Usage: $0 {start|stop|status|restart}"
esac

และได้ตั้งค่าtorbot.pyให้เป็น+xและ#!/usr/local/bin/pythonที่ด้านบน เมื่อฉันพยายามเริ่มจริงฉันจะได้รับ:

:/var/lock/subsys$ sudo service torbot start Failed to start torbot.service: Unit torbot.service not found.

ฉันพลาดอะไรไปรึเปล่า?

คำตอบ:


4

หากคุณใช้ Ubuntu 16.04 หรือใหม่กว่าคุณอาจต้องการตรวจสอบเอกสารของ systemd เกี่ยวกับการสร้างไฟล์บริการ

สคริปต์ใช้สำหรับระบบ init เก่าและจัดการโดยเลเยอร์ความเข้ากันได้แบบดั้งเดิม


2

สำหรับฉันฉันใช้ Ubuntu 16.04

ก่อนอื่นให้เปลี่ยนฟังก์ชั่น init

. /etc/init.d/functions

ถึง

. /lib/lsb/init-functions

จากนั้นในเชลล์ให้สร้างลิงก์สัญลักษณ์จาก / etc / rc * ไปที่สคริปต์ของฉัน:

sudo update-rc.d <myapp> defaults 95

95 หมายถึงอะไรที่นี่?
Gherman

@Gherman มันสำคัญ
turson

1

ตกลงฉันลองทำตามขั้นตอนบางคำตอบของสแต็คโอเวอร์โฟลว์นี้ ( ใช้สคริปต์พุ่งพรวดบน 17.04? ) และพวกเขาทำงาน env ของฉันเป็นดังนี้

  1. Ubuntu เวลา 17.10 น
  2. ฉันมีแอพหลามบนเซิร์ฟเวอร์ Gunicorn 19.x ฉันต้องเริ่มแอปพลิเคชันนี้เป็นบริการ

ก่อนอื่นคุณต้องเขียนไฟล์ foo.service

[Unit] 
Description=FooServer 

[Service] 
Restart=on-failure
WorkingDirectory=/path/to/your/working/directory/where the foo lives
ExecStart=/what/process/will call foo eg: in my case I used gunicorn app:app
ExecReload=/bin/kill -HUP $MAINPID 
KillSignal=SIGINT 

[Install] 
WantedBy=multi-user.target

ความหมายของทุกคำทางซ้ายมือของเครื่องหมาย '=' และสิ่งที่เทียบเท่าใน (ก่อนหน้านี้) พุ่งพรวดอยู่ในลิงค์https://wiki.ubuntu.com/SystemdForUpstartUsers

เมื่อไฟล์พร้อมใช้งานสมมติว่าคุณตั้งชื่อเป็น 'foo.service' (นามสกุล. service เป็นสิ่งสำคัญ)

คุณต้องวางไฟล์ไว้ /lib/systemd/system

หลังจากนั้นคุณต้องเปิดใช้บริการโดยการโทร

systemctl enable foo

ซึ่งจะให้คุณป้อนรหัสผ่านรูทของคุณเพราะมันจะสร้าง symlink

หากคุณมาถึงที่นี่โดยไม่มีความยุ่งยากคุณก็เป็นคนดี ดังนั้นบริการของคุณจึงถูกสร้างขึ้น Start คือการโทร

sudo service foo start

systemctl status fooเพื่อดูสถานะ sudo service foo stopเพื่อหยุดบริการ



0

ฉันมีปัญหาเดียวกันนี่เป็นวิธีแก้ปัญหาที่เหมาะกับฉัน ลอง:

sudo systemctl daemon-reload

sudo systemctl เปิดใช้งาน daemon_app.service

sudo systemctl start daemon_app.service

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