Ale*_*kin 23
这是http://www.debian-administration.org/articles/28的摘录,它似乎回答了您的问题。
注意:在下面的示例脚本中,只需添加对“ start)”部分的调用即可实际启动您的程序。您可以在不重新启动系统的情况下测试脚本的功能:使用完整路径调用它并为其提供参数“ start”或“ stop”
开始:
Debian 使用类似 Sys-V 的 init 系统在系统运行级别更改时执行命令 - 例如在启动和关闭时。
如果您希望在机器启动时添加一个新服务来启动,您应该将必要的脚本添加到该目录中/etc/init.d/。该目录中已经存在的许多脚本将为您提供可以执行的操作类型的示例。
这是一个非常简单的脚本,它分为两部分,始终运行的代码和使用“start”或“stop”调用时运行的代码。
#! /bin/sh
# /etc/init.d/blah
#
# Some things that run always
touch /var/lock/blah
# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting script blah "
echo "Could do more here"
;;
stop)
echo "Stopping script blah"
echo "Could do more here"
;;
*)
echo "Usage: /etc/init.d/blah {start|stop}"
exit 1
;;
esac
exit 0
Run Code Online (Sandbox Code Playgroud)
将文件保存到正确位置后,通过运行“ chmod 755 /etc/init.d/blah”确保它是可执行的。
然后,您需要添加适当的符号链接,以便在系统出现故障或出现故障时执行脚本。
最简单的方法是使用 Debian 特定的命令update-rc.d:
root@skx:~# update-rc.d blah defaults
Adding system startup for /etc/init.d/blah ...
/etc/rc0.d/K20blah -> ../init.d/blah
/etc/rc1.d/K20blah -> ../init.d/blah
/etc/rc6.d/K20blah -> ../init.d/blah
/etc/rc2.d/S20blah -> ../init.d/blah
/etc/rc3.d/S20blah -> ../init.d/blah
/etc/rc4.d/S20blah -> ../init.d/blah
/etc/rc5.d/S20blah -> ../init.d/blah
Run Code Online (Sandbox Code Playgroud)
Jit*_*ran 17
使用起来crontab要容易得多。
使用crontab -e以编辑用户的crontab。
在最后添加以下行:
@reboot <command>
Run Code Online (Sandbox Code Playgroud)
例子:
@reboot my_script.sh@reboot python my_script.py arg1 arg2最后,使用crontab -l以确保您的脚本已添加到列表中。
例如,这个 liner 将添加一个在每次重新启动时运行 script.sh 的作业:
crontab -l > file; echo "@reboot /home/user/script.sh" >> file; crontab file; rm file;
Run Code Online (Sandbox Code Playgroud)
归功于:Gumby The Green 19 年 7 月 16 日 10:20
mar*_*aft 12
较新版本的 linux支持 systemd(如@AlexanderShcheblikin 所说)。它具有更多功能,并且比特定于 debian 的解决方案更便携。
请阅读 这个非常棒的指南。
以下是所需最低限度的快速参考:
myscript.sh具有可执行权限的脚本(例如)。myservice.service带有“.service”扩展名的单元文件(例如),/etc/systemd/system具有 644 权限,其中包含执行脚本的命令。例如,:
[Unit]
Description=Example systemd service.
[Service]
Type=simple
ExecStart=/bin/bash /path/to/myscript.sh
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
sudo systemctl enable myservice以使其在引导时启动。最好的方法是检查您的发行版的软件包源是否有常规系统服务,例如 OpenSSH - 您将看到什么是好的做法。毕竟,开源背后的原因之一是能够从源代码中学习。
| 归档时间: |
|
| 查看次数: |
211436 次 |
| 最近记录: |