如何在启动时运行Shell脚本

Amazon S3 Linux实例上,我有两个名为的脚本start_my_appstop_my_app它们永远启动和停止(依次运行Node.js应用程序)。我使用这些脚本手动启动和停止我的Node.js应用程序。到目前为止,一切都很好。

我的问题:我还想将其设置start_my_app为在系统启动时运行。我知道我需要在其中添加文件,init.d并且知道如何将其符号链接到其中的适当目录rc.d,但是我无法弄清楚放置在其中的文件中实际需要什么init.d我认为这应该只是一条线,例如start_my_app,,但这对我没有用。

宝儿猪猪2020/03/18 15:22:56

对于某些人来说,这将起作用:

您可以简单地将以下命令添加到系统首选项启动应用程序中

bash /full/path/to/your/script.sh
阿飞A2020/03/18 15:22:56

无痛,最简单,最通用的方法是简单地使用~.bash_profile~.profile (如果没有bash_profile文件)执行它

只需在该文件的底部添加执行命令,它将在系统启动时执行。

我在底部有一个示例。 ~\Desktop\sound_fixer.sh

宝儿十三2020/03/18 15:22:56

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

  1. 在我的情况下,创建一个称为p示例“ brain_microservice1.service”的微服务:

    $ nano /lib/systemd/system/brain_microservice1.service
    
  2. 在此新服务内:

    [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
    
  3. 授予权限:

    $ chmod -X /lib/systemd/system/brain_microservice*
    $ chmod -R 775 /lib/systemd/system/brain_microservice*
    
  4. 然后授予执行权限:

    $ systemctl daemon-reload
    
  5. 然后启用,这将使它始终在启动时开始

    $ systemctl enable brain_microservice1.service
    
  6. 然后您可以对其进行测试;

    $ sudo现在重启

  7. 完成=成功!!

可以使用相同的主体脚本来运行shell,进行反应...数据库启动脚本...任何类型的os代码...希望对您有所帮助...

...

前端Stafan2020/03/18 15:22:55

我指的是这个博客,总是听起来不错的选择

https://blog.xyzio.com/2016/06/14/setting-up-a-golang-website-to-autorun-on-ubuntu-using-systemd/

vim /lib/systemd/system/gosite.service

Description=A simple go website
ConditionPathExists=/home/user/bin/gosite

[Service]
Restart=always
RestartSec=3
ExecStart=/home/user/bin/gosite

[Install]
WantedBy=multi-user.target

systemctl enable gosite.service
逆天Eva2020/03/18 15:22:55

在卢本图,我不得不处理相反的情况。引导后Skype开始运行,我在~/.config/autostart/文件中找到skypeforlinux.desktop该文件的内容如下:

[Desktop Entry]
Name=Skype for Linux
Comment=Skype Internet Telephony
Exec=/usr/bin/skypeforlinux
Icon=skypeforlinux
Terminal=false
Type=Application
StartupNotify=false
X-GNOME-Autostart-enabled=true

删除该文件对我有帮助。

MandyTony2020/03/18 15:22:55
  • 将脚本添加到/etc/init.d/目录
  • 更新您的rc运行级别: $ update-rc.d myScript.sh defaults NN其中NN是应该执行的顺序。例如99表示它将在98之后100之前运行。
GilDavaid米亚2020/03/18 15:22:55

如果您要运行的是一个简单的脚本,则绝对是最简单的方法(或其他任何方法),如果您有使用系统>首选项的gui,则可以启动应用程序。

只需浏览至所需的脚本即可。(使脚本可执行)

小宇宙Tom2020/03/18 15:22:55

对于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 ||  exit 1   # Added by me
exit 0

/path_to_file/filename.sh可能应该是可执行的(我认为是)。

前端Harry十三2020/03/18 15:22:55

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

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

只需选择一个任意的可执行文件,甚至是一个shell脚本,然后使用命令行参数启动内核即可:

init=/path/to/myinit

在启动快要结束时,Linux内核在给定路径上运行第一个用户空间可执行文件。

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

但是我们可以劫持/init它以运行我们自己的最小脚本,以更好地了解我们的系统。

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

Tony樱番长2020/03/18 15:22:55

这个简单的解决方案在运行CentOS的Amazon Linux实例上为我工作。编辑/etc/rc.d/rc.local文件,然后将命令放在此处。在该文件中提到它将所有其他初始化脚本之后执行因此,在这方面要小心。这是文件当前查找我的方式。在此处输入图片说明最后一行是我的脚本的名称。

阿飞Pro2020/03/18 15:22:55

另一种选择是在crontab中使用@reboot命令。

并非每个版本的cron都支持此功能,但是如果您的实例基于Amazon Linux AMI,则它将起作用。

西门逆天2020/03/18 15:22:55

你能行的 :

chmod +x PATH_TO_YOUR_SCRIPT/start_my_app 

然后使用此命令

update-rc.d start_my_app defaults 100

请参阅Cyber​​citi上的此页面

Tony小宇宙2020/03/18 15:22:55

输入cron使用sudo

sudo crontab -e

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

@reboot sh /home/user/test.sh

保存:

按ESC,然后按:x保存并退出,或者按ESC再按ZZ(即shift + zz)

测试测试测试

  1. 在不使用cron的情况下运行测试脚本,以确保其确实有效。

  2. 确保将命令保存在cron中,使用 sudo crontab -e

  3. 重新启动服务器以确认一切正常 sudo @reboot

LEY小卤蛋Near2020/03/18 15:22:55

只需在crontab中添加一行即可。

确保文件是可执行文件:

chmod +x /path_to_you_file/your_file

要编辑crontab文件:

crontab -e

您必须添加的行:

@reboot  /path_to_you_file/your_file

这么简单!

小哥猿2020/03/18 15:22:55

一种简单的方法是在中添加一行/etc/rc.local

/PATH/TO/MY_APP &

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

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

(结尾的“&”号使进程成为后台,并允许rc.local继续执行)

如果您想要一个完整的初始化脚本,那么debian distro有一个模板文件,因此:

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

并适应它。

猿樱2020/03/18 15:22:55

为此设置一个crontab

#crontab -e
@reboot  /home/user/test.sh

每次启动后,它将运行测试脚本。