在亚马逊linux实例上,我有两个名为 start_my_app
和 stop_my_app
的脚本,它们启动和停止forever(后者又运行我的node.js应用程序) . 我使用这些脚本手动启动和停止我的节点应用程序 . 到现在为止还挺好 .
我的问题:我也想设置它,以便在系统启动时运行 start_my_app
. 我知道我需要在 init.d
中添加一个文件,我知道如何将它符号链接到 rc.d
中的正确目录,但是无法弄清楚我在 init.d
中放置的文件中究竟需要什么 . 我认为它应该只是一行,例如, start_my_app
,但这对我来说并不适用 .
15 回答
只需在你的crontab中添加一行代码..
确保该文件是可执行的:
要编辑crontab文件:
您必须添加的行:
那很简单!
使用
sudo
输入cron
:sudo crontab -e
添加一个在启动时运行的命令,在本例中是一个脚本:
@reboot sh /home/user/test.sh
Save:
按ESC然后:x保存并退出,或按ESC然后ZZ(即移位zz)
Test Test Test :
运行没有cron的测试脚本以确保它确实有效 .
确保在cron中保存了命令,使用
sudo crontab -e
重启服务器以确认一切正常
sudo @reboot
你能行的 :
然后使用此命令
请在Cyberciti上查看此页面 .
在您放入
/etc/init.d/
的文件中,您必须将其设置为可执行文件:感谢@meetamit,如果没有运行,你必须创建一个符号链接到
/etc/rc.d/
请注意,在最新的Debian上,这将不起作用,因为您的脚本必须符合LSB(至少提供以下操作:启动,停止,重新启动,强制重新加载和状态):https://wiki.debian.org/LSBInitScripts
作为注释,您应该放置脚本的绝对路径而不是相对的路径,它可以解决意外问题:
并且不要忘记在该文件的顶部添加:
为此设置一个crontab
每次启动后,它都会运行测试脚本 .
一个简单的方法是在
/etc/rc.local
中添加一行:或者如果要以root身份运行命令:
(尾随&符号表示进程并允许rc.local继续执行)
如果你想要一个完整的init脚本,debian发行版有一个模板文件,所以:
并适应它 .
这是我在红帽系统上做的方式
将您的脚本放在
/etc/init.d
中,由root和可执行文件拥有 . 在脚本的顶部,您可以为chkconfig
指定一个指令 . 例如,以下脚本用于以用户oracle启动java应用程序 .脚本的名称是
/etc/init.d/apex
这表示脚本必须在级别3,4和5运行,并且启动/停止的优先级为99和10 .
然后,作为root用户,您可以使用
chkconfig
在启动时启用或禁用脚本,并且您可以使用服务开始/停止顶点
另一个选择是在crontab中有一个@reboot命令 .
并非每个版本的cron都支持此功能,但如果您的实例基于Amazon Linux AMI,那么它将起作用 .
Create your own /init executable
这不是你想要的,但它很有趣!
只需选择一个任意可执行文件even a shell script,然后使用命令行参数启动内核:
在引导结束时,Linux内核在给定路径上运行第一个用户空间可执行文件 .
几个项目提供了主要发行版使用的流行的可执行文件,例如: systemd,在大多数发行版中,init会分叉正常系统操作中使用的一堆进程 .
但是我们可以劫持
/init
它来运行我们自己的最小脚本来更好地理解我们的系统 .这是一个可重复性最小的设置:https://github.com/cirosantilli/linux-kernel-module-cheat/tree/f96d4d55c9caa7c0862991025e1291c48c33e3d9/README.md#custom-init
对于Debian 9,请参阅https://askubuntu.com/questions/228304/how-do-i-run-a-script-at-start-up . 这对我很有帮助 . Debian 9的简短版本:将命令(作为root)添加到 /etc/rc.local
可能 /path_to_file/filename.sh 应该是可执行的(我想是这样) .
绝对最简单的方法,如果你想要运行的只是一个简单的脚本,(或任何东西)就是你有一个gui来使用系统>首选项然后启动应用程序 .
只需浏览到您想要的脚本即可 . (使脚本可执行)
This简单的解决方案适用于运行CentOS的Amazon Linux实例 . 编辑
/etc/rc.d/rc.local
文件并将命令放在那里 . 在此文件中提到它将执行 after 所有其他init脚本 . 所以在这方面要小心 . 这是文件当前查找我的方式 .. 最后一行是我的脚本的名称 .
将脚本添加到/etc/init.d/目录
更新你的rc运行级别:
$ update-rc.d myScript.sh defaults NN
其中NN是应该执行它的顺序 . 例如99意味着它将在98之后和100之前运行 .对于某些人,这将工作你可以简单地将以下命令添加到系统>首选项>启动应用程序:
如果你想放置启动也可以使用
首先移动你的脚本/etc/init.d然后chmod 777 /etc/init.d/你的脚本名称
应用以下命令后
update-rc.d你的脚本默认删除update-rc.d -f你的脚本删除
在初创公司,你可以看到你的应用程序将运行 .