在一个Amazon S3 Linux实例中,我有两个名为start_my_app和stop_my_app的脚本,它们永远地启动和停止(反过来运行我的Node.js应用程序)。我使用这些脚本手动启动和停止我的Node.js应用程序。到目前为止一切顺利。
我的问题是:我还想设置它,以便在系统启动时运行start_my_app。我知道我需要在init中添加一个文件。d和我知道如何符号链接到rc内的适当目录。d,但是我不知道我放在init。d中的文件里到底需要什么。我认为它应该只有一行,比如start_my_app,但这对我来说并不管用。
很多答案都是在启动时启动某个东西,但通常你想稍微晚一点启动它,因为你的脚本依赖于例如网络。使用at只是添加这个延迟,例如:
at now + 1 min -f /path/yourscript
你可以在/etc/rc.中添加本地的,还在cron喜欢:
# crontab -e
@reboot at now + 1 min -f /path/yourscript
把cron和at结合起来是不是很有趣?信息在手册页。
至于@reboot可能不被广泛支持的评论,试试看吧。我发现/etc/rc.Local在支持systemd的发行版上已经过时了,比如ubuntu和raspbian。
你放在/etc/init.的文件D /必须设置为可执行:
chmod +x /etc/init.d/start_my_app
正如@meetamit所指出的,如果它仍然不能运行,你可能必须创建一个到/etc/rc.d/文件的符号链接
ln -s /etc/init.d/start_my_app /etc/rc.d/
请注意,在最新版本的Debian上,这将不起作用,因为你的脚本必须与LSB兼容(至少提供以下操作:启动,停止,重新启动,强制重新加载和状态):
https://wiki.debian.org/LSBInitScripts
注意,你应该在你的脚本中使用文件的绝对路径,而不是相对路径,这可能会解决意想不到的问题:
/var/myscripts/start_my_app
最后,确保你在文件顶部包含了shebang:
#!/bin/sh