我是Linux新手,很期待启动应用程序(每10秒切换一次led)。我已经编写了应用程序,并且运行良好,但是现在我想在启动时自动启动它。
这里的文档说将启动脚本复制到/etc/init.d
目录,并在目录中建立指向复制脚本的符号链接rc.d
。
这些脚本文件的扩展名和名称应该是什么?我们可以在其中手动添加符号链接rc.d
吗,或者有一些特定的过程吗?
有什么建议如何实现吗?
cron
。
我是Linux新手,很期待启动应用程序(每10秒切换一次led)。我已经编写了应用程序,并且运行良好,但是现在我想在启动时自动启动它。
这里的文档说将启动脚本复制到/etc/init.d
目录,并在目录中建立指向复制脚本的符号链接rc.d
。
这些脚本文件的扩展名和名称应该是什么?我们可以在其中手动添加符号链接rc.d
吗,或者有一些特定的过程吗?
有什么建议如何实现吗?
cron
。
Answers:
这是来自http://www.debian-administration.org/articles/28的摘录,它似乎可以回答您的问题。
注意:在下面的示例脚本中,只需在“ start)
”部分添加一个调用即可实际启动程序。您可以在不重新启动系统的情况下测试脚本的功能:以完整路径调用它,并为其指定参数“ start
”或“ stop
”
开始:
当系统运行级别更改时,例如在启动和关闭时,Debian使用类似于Sys-V的init系统执行命令。
如果希望添加新的服务以在计算机启动时启动,则应在目录中添加必要的脚本/etc/init.d/
。该目录中已经存在的许多脚本将为您提供可以执行的操作示例。
这是一个非常简单的脚本,分为两个部分:始终运行的代码,以及通过“开始”或“停止”调用时运行的代码。
#! /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
systemd
用于许多方面,包括启动配置。使用systemctl
控制和配置systemd
。
使用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
使用crontab
起来容易得多。
使用crontab -e
以编辑用户的crontab。
在末尾添加以下行:
@reboot <command>
例子:
@reboot my_script.sh
@reboot python my_script.py arg1 arg2
最后使用crontab -l
以确保您的脚本已添加到列表中。
较新版本的Linux 支持 systemd
(如@AlexanderShcheblikin所说)。它比debian专用解决方案具有更多功能,并且更易于移植。
请阅读 这个非常好的指南。
以下是所需最低要求的快速参考:
myscript.sh
具有可执行权限的脚本(例如)。myservice.service
扩展名为“ .service” 的单元文件(例如)/etc/systemd/system
,包含执行脚本的命令。例如,:
[Unit]
Description=Example systemd service.
[Service]
Type=simple
ExecStart=/bin/bash /path/to/myscript.sh
[Install]
WantedBy=multi-user.target
sudo systemctl enable myservice
以使其能够在启动时启动。
start-stop-daemon
处理方式会更好(尽管它最好由程序自己来守护)。您正在使用什么发行版?在桌面MIME类型之外,文件扩展名在* nix中是没有意义的,它优选可执行文件没有扩展名。