我是 Linux 新手,期待启动应用程序(每 10 秒切换一次 LED)。我已经编写了应用程序并且它工作正常,但现在我想在启动时自动启动它。
文档这里表示将启动脚本复制到/etc/init.d
目录中,并在目录中创建指向复制脚本的符号链接rc.d
。
这些脚本文件的扩展名和名称应该是什么?我们可以手动添加符号链接吗rc.d
?或者是否有一些特定的程序?
有什么建议如何实现它吗?
答案1
这是摘录自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
将文件保存到正确的位置后,请通过运行“”确保其可执行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
答案2
较新版本的 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
- 运行命令
sudo systemctl enable myservice
以使其能够在引导时启动。
答案3
使用起来crontab
更加容易。
用于crontab -e
编辑用户的 crontab。
在末尾添加以下行:
@reboot <command>
例子:
@reboot my_script.sh
@reboot python my_script.py arg1 arg2
最后,用于crontab -l
确保您的脚本已添加到列表中。
更新:
例如,这个衬垫将添加一个在每次重新启动时运行 script.sh 的作业:
crontab -l > file; echo "@reboot /home/user/script.sh" >> file; crontab file; rm file;
图片来源:Gumby The Green 2019 年 7 月 16 日 10:20
答案4
使用 Supervisor,这是一个有效的程序,可以使用参数管理和记录启动应用程序。了解更多信息http://supervisord.org/running.html和(按照安装说明进行操作。
创建一个conf文件/etc/supervisor/conf.d/{PROGRAM_NAME}.conf
,这是代码,
[program:{PROGRAM_NAME}]
command=/usr/bin/{PROGRAM_NAME} -arg1 -arg2
autostart=true
autorestart=true
stderr_logfile=/var/log/supervisor/{PROGRAM_NAME}.err.log
stdout_logfile=/var/log/supervisor/{PROGRAM_NAME}.out.log
然后从cmd行执行:
supervisorctl reload