我为我的 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 脚本?)并且它们起作用了我的环境如下
- Ubuntu 17.10
- 我在 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