我需要在启动时启动icecast2 服务。
为了使其在启动时运行,我在 crontab (root) 中添加了以下行:
@reboot service icecast2 start >/home/pi/logs/icecast2.log 2>&1
重新启动后,该服务无法运行,并且出现以下错误:
/bin/sh: 1: 服务: 未找到
所以我遵循了这个回答在类似的线程上,并按照建议添加了完整路径:
@reboot service /usr/bin/icecast2 start >/home/pi/logs/icecast2.log 2>&1
但现在我得到了这个错误:
无法启动 usr-bin-icecast2.service.mount:找不到单元 usr-bin-icecast2.service.mount。
笔记:
- 当我打字时
sudo service icecast2 start
它起作用了。 - 在 Raspberry pi 上使用 Debian Scratch
答案1
您不需要使用cron
来获取服务来启动启动。
你所需要的只是这个:
systemctl enable icecast2
这将在每次启动时启动它。
答案2
该service
程序期望参数 1 是/etc/init.d/
目录中的可执行文件。在 crontab 文件中,您指定了icecast2 可执行文件的路径。
您应该阅读 Debian/Unix 的 init 系统。 AFAIK,Debian 使用现在事实上的标准systemd
init 系统,它负责在启动时启动服务(以及更多),而service
现在是 systemd 的包装脚本systemctl
,它控制服务(现在称为Units
),如下所示:
systemctl start icecast2
但service
仍将向后兼容旧的 init 系统(称为sysvinit
),因此您仍然可以service
使用systemctl
.
不鼓励通过 cron 启动服务/守护进程,因为事实上的标准是定义提供更好结构和更多功能的 systemd 单元,或者使用旧式运行级别脚本,/etc/rc.d
一旦内核达到某个运行级别( “启动状态”)。
帮自己一个忙,在网上搜索上面提到的术语,会有很多乐趣。