在一个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,但这对我来说并不管用。


当前回答

使用Python 3微服务或shell;使用Ubuntu Server 18.04 (Bionic Beaver)或Ubuntu 19.10 (Eoan Ermine)或Ubuntu 18.10 (Cosmic Cuttlefish)我总是喜欢这些步骤,而且它也总是有效:

Creating a microservice called p example "brain_microservice1.service" in my case: $ nano /lib/systemd/system/brain_microservice1.service Inside this new service that you are in: [Unit] Description=brain_microservice_1 After=multi-user.target [Service] Type=simple ExecStart=/usr/bin/python3.7 /root/scriptsPython/RUN_SERVICES/microservices /microservice_1.py -k start -DFOREGROUND ExecStop=/usr/bin/python3.7 /root/scriptsPython/RUN_SERVICES/microservices/microservice_1.py -k graceful-stop ExecReload=/usr/bin/python3.7 /root/scriptsPython/RUN_SERVICES/microservices/microservice_1.py -k graceful PrivateTmp=true LimitNOFILE=infinity KillMode=mixed Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target Give the permissions: $ chmod -X /lib/systemd/system/brain_microservice* $ chmod -R 775 /lib/systemd/system/brain_microservice* Give the execution permission then: $ systemctl daemon-reload Enable then, this will make then always start on startup $ systemctl enable brain_microservice1.service Then you can test it; $ sudo reboot now Finish = SUCCESS!!

这可以用相同的主体脚本来运行shell, react…数据库启动脚本…任何类型的OS代码…希望这能帮助你…

...

其他回答

首先创建你的启动脚本@ /home/user/startup.sh,并使其可执行

chmod +x /home/user/startup.sh

然后为它设置crontab:

$ crontab -e
@reboot  /home/user/startup.sh

现在你的startup.sh脚本将在每次启动时运行。

一个简单的方法是在/etc/rc.中添加一行的地方:

/PATH/TO/MY_APP &

或者如果你想以特殊用户的身份运行命令:

su - USER_FOOBAR -c /PATH/TO/MY_APP &

(后面的&号作为进程的背景,并允许rc。本地继续执行)

如果你想要一个完整的init脚本,debian发行版有一个模板文件,所以:

cp /etc/init.d/skeleton /etc/init.d/your_app

稍微调整一下。

使用sudo输入cron:

Sudo crontab -e

添加一个在启动时运行的命令,在这种情况下是一个脚本:

@reboot sh /home/user/test.sh

拯救策略:

按ESC然后:x保存并退出,或者按ESC然后ZZ(也就是shift+ ZZ)

测试测试:

运行不带cron的测试脚本,以确保它实际工作。 确保您将命令保存在cron中,使用sudo crontab -e 重启服务器以确认一切正常sudo @reboot

使用Python 3微服务或shell;使用Ubuntu Server 18.04 (Bionic Beaver)或Ubuntu 19.10 (Eoan Ermine)或Ubuntu 18.10 (Cosmic Cuttlefish)我总是喜欢这些步骤,而且它也总是有效:

Creating a microservice called p example "brain_microservice1.service" in my case: $ nano /lib/systemd/system/brain_microservice1.service Inside this new service that you are in: [Unit] Description=brain_microservice_1 After=multi-user.target [Service] Type=simple ExecStart=/usr/bin/python3.7 /root/scriptsPython/RUN_SERVICES/microservices /microservice_1.py -k start -DFOREGROUND ExecStop=/usr/bin/python3.7 /root/scriptsPython/RUN_SERVICES/microservices/microservice_1.py -k graceful-stop ExecReload=/usr/bin/python3.7 /root/scriptsPython/RUN_SERVICES/microservices/microservice_1.py -k graceful PrivateTmp=true LimitNOFILE=infinity KillMode=mixed Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target Give the permissions: $ chmod -X /lib/systemd/system/brain_microservice* $ chmod -R 775 /lib/systemd/system/brain_microservice* Give the execution permission then: $ systemctl daemon-reload Enable then, this will make then always start on startup $ systemctl enable brain_microservice1.service Then you can test it; $ sudo reboot now Finish = SUCCESS!!

这可以用相同的主体脚本来运行shell, react…数据库启动脚本…任何类型的OS代码…希望这能帮助你…

...

创建自己的/init可执行文件

这不是你想要的,但很有趣!

只需选择一个任意的可执行文件,甚至是一个shell脚本,并使用命令行参数引导内核:

init=/path/to/myinit

在引导结束时,Linux内核在给定的路径上运行第一个用户空间可执行文件。

有几个项目提供了主流发行版(如systemd)所使用的流行的init可执行文件,并且在大多数发行版中,init会派生出一堆用于正常系统操作的进程。

但是我们可以劫持/初始化它来运行我们自己的最小脚本,以更好地理解我们的系统。

这里是一个最小的可复制设置:https://github.com/cirosantilli/linux-kernel-module-cheat/tree/f96d4d55c9caa7c0862991025e1291c48c33e3d9/README.md#custom-init