未能启动.service:单位。无法提供服务

未能启动.service:单位。无法提供服务

我为我的 Python 机器人创建了一个超级基本的 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.

我是否遗漏了什么?

答案1

如果你使用的是 ubuntu 16.04 或更新版本,你可能需要查看 systemd 的文档创建服务文件

该脚本适用于旧的 init 系统,由旧版兼容层管理。

答案2

对我来说,我正在使用 Ubuntu 16.04。

首先修改init函数

. /etc/init.d/functions

. /lib/lsb/init-functions

然后在 shell 中,创建从 /etc/rc* 到我的脚本的符号链接:

sudo update-rc.d <myapp> defaults 95

答案3

好的,我尝试了这个 stackoverflow 答案的一些步骤(在 17.04 上运行 upstart 脚本?)并且它们起作用了我的环境如下

  1. Ubuntu 17.10
  2. 我在 Gunicorn 19.x 服务器上有一个 python 应用程序,我需要将该应用程序作为服务启动。

首先您需要编写一个 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

'=' 符号左侧每个单词的含义以及它们在 upstart 中的对应含义(与之前的版本相同)位于链接中https://wiki.ubuntu.com/SystemdForUpstartUsers

文件准备好后,假设您将其命名为“foo.service”(.service 扩展名很重要)

您需要将文件放在/lib/systemd/system

之后你需要通过调用来启用该服务

systemctl enable foo

由于它将创建符号链接,因此将提示您输入 root 密码。

如果你已经顺利到达这里,那就太好了。你的服务由此创建。开始是通过调用

sudo service foo start

systemctl status foo查看 sudo service foo stop停止服务的状态

答案4

我遇到了同样的问题,这是对我有用的解决方案。尝试:

sudo systemctl 守护进程重新加载

sudo systemctl enable daemon_app.service

sudo systemctl 启动 daemon_app.service

相关内容