443

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但这对我不起作用。

4

22 回答 22

450

Set a crontab for this

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

after every startup it will run the test script.

于 2015-03-25T05:12:44.710 回答
327

在您放入的文件中,/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

并且不要忘记在该文件之上添加:

#!/bin/sh
于 2012-10-19T11:59:07.053 回答
125

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

/PATH/TO/MY_APP &

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

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

(尾随的&符号使进程后台运行并允许 rc.local 继续执行)

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

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

并稍作调整。

于 2012-10-19T11:58:45.807 回答
36

这就是我在Red Hat Linux系统上的做法。

将您的脚本放入/etc/init.d,由 root 和可执行文件拥有。在脚本的顶部,您可以为chkconfig. 例如,以下脚本用于以用户 oracle 身份启动 Java 应用程序。

脚本的名称是/etc/init.d/apex

#!/bin/bash
# chkconfig: 345 99 10
# Description: auto start apex listener
#
case "$1" in
 'start')
   su - oracle -c "cd /opt/apex ; java -jar apex.war > logs/apex.log 2>logs/apex_error.log &";;
 'stop')
   echo "put something to shutdown or kill the process here";;
esac

这表示脚本必须在级别 3、4 和 5 运行,并且启动/停止的优先级是 99 和 10。

然后,作为用户,root您可以chkconfig在启动时启用或禁用脚本:

chkconfig --list apex
chkconfig --add apex

你可以使用service start/stop apex.

于 2014-06-20T07:27:59.403 回答
30

输入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

于 2017-10-25T05:14:37.667 回答
17

只需在您的 crontab 中添加一行 ..

确保文件是可执行的:

chmod +x /path_to_you_file/your_file

编辑 crontab 文件:

crontab -e

您必须添加的行:

@reboot  /path_to_you_file/your_file

就这么简单!

于 2016-11-10T13:55:19.300 回答
12

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

并非每个版本的 cron 都支持这一点,但如果您的实例基于 Amazon Linux AMI,那么它将起作用。

于 2013-11-10T19:07:06.173 回答
9

nano使用或编辑器编辑 rc.local 文件gedit并在其中添加您的脚本。文件路径可以是/etc/rc.local/etc/rc.d/rc.local

sudo nano /etc/rc.local

这是编辑:

#!/bin/sh
/path-to-your-script/your-scipt-name.sh

完成后按ctrl+o更新,然后Enterctrl+x

使文件可执行。

sudo chmod 755 /etc/rc.local

然后启动 rc-local 服务以在启动期间运行脚本。

sudo systemctl start rc-local
于 2020-07-06T06:24:59.740 回答
6

你能行的 :

chmod +x PATH_TO_YOUR_SCRIPT/start_my_app 

然后使用这个命令

update-rc.d start_my_app defaults 100

请在Cyber​​citi上查看此页面。

于 2016-01-05T08:20:44.780 回答
3

创建您自己的 /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

于 2017-10-01T18:29:47.637 回答
3

这个简单的解决方案在运行 CentOS 的 Amazon Linux 实例上为我工作。编辑您的/etc/rc.d/rc.local文件并将命令放在那里。该文件中提到它将在所有其他初始化脚本之后执行。所以在这方面要小心。这就是文件目前对我的看法。在此处输入图像描述. 最后一行是我的脚本的名称。

于 2016-12-27T11:02:13.850 回答
3

关于在启动时启动某些东西的许多答案,但通常您希望稍后再启动它,因为您的脚本依赖于例如网络。用于at仅添加此延迟,例如:

at now + 1 min -f /path/yourscript

您可以在 /etc/rc.local 中添加它,但也可以cron像这样:

# crontab -e
@reboot at now + 1 min -f /path/yourscript

将 cron 和 at 结合起来不是很有趣吗?信息在手册页man at中。

至于@reboot 可能没有得到广泛支持的评论,试试看吧。我发现 /etc/rc.local 在支持 systemd 的发行版上已经过时,例如 ubuntu 和 raspbian。

于 2020-10-08T23:33:23.117 回答
3

多种方式来完成它

  1. crontab
  2. rc.local
  3. 初始化文件
  4. 系统
于 2021-09-17T08:42:12.473 回答
2

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

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
于 2020-01-02T15:54:28.537 回答
1

如果您只想运行一个简单的脚本(或任何东西),那么绝对最简单的方法是如果您有一个 gui 来使用系统 > 首选项然后启动应用程序。

只需浏览到您想要的脚本,然后就可以了。(使脚本可执行)

于 2014-12-24T03:18:05.560 回答
1

对于 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应该是可执行的(我认为是这样)。

于 2017-04-13T05:13:06.050 回答
1

在 Lubuntu,我不得不处理相反的情况。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

删除此文件对我有帮助。

于 2019-02-02T17:52:07.810 回答
1

这里有一个更简单的方法!

首先:编写一个shell脚本并将其保存为.sh 这里是一个例子

#!/bin/bash
Icoff='/home/akbar/keyboardONOFF/icon/Dt6hQ.png'
id=13
fconfig=".keyboard"
echo "disabled" > $fconfig
xinput float $id
notify-send -i $Icoff "Internal Keyboard disabled";

此脚本将在启动时禁用内部键盘。

二:打开应用程序“Startup Application Preferences”

在此处输入图像描述

在此处输入图像描述

第三:点击添加。第四:在NAME部分给一个名字。第五:在命令部分浏览到您的 .sh 。第六:编辑你的命令部分:

bash <space> path/to/file/<filename>.sh <space> --start

第七:点击添加。而已!完成的!

现在通过重新启动您的电脑进行确认。

干杯!

于 2020-06-01T04:05:25.597 回答
0

使用 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. 然后启用,这将使 then 始终在启动时启动

    $ systemctl enable brain_microservice1.service
    
  6. 然后你可以测试它;

    $ sudo 现在重新启动

  7. 完成=成功!!

这可以使用相同的主体脚本来运行 shell、react ... 数据库启动脚本 ... 任何类型的操作系统代码 ... 希望这对您有所帮助...

...

于 2019-12-26T06:26:17.357 回答
0
  • 将脚本添加到 /etc/init.d/ 目录
  • 更新你的 rc 运行级别: $ update-rc.d myScript.sh defaults NN其中 NN 是它应该执行的顺序。例如 99 意味着它将在 98 之后和 100 之前运行。
于 2016-08-20T08:44:47.213 回答
0

无痛、最简单和最通用的方法就是使用~.bash_profileor ~.profile (如果你没有 bash_profile 文件)执行它。

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

我在底部有一个例子; ~\Desktop\sound_fixer.sh

于 2019-05-12T20:04:11.753 回答
-6

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

您可以简单地将以下命令添加到SystemPreferencesStartup Applications

bash /full/path/to/your/script.sh
于 2014-11-27T13:59:44.733 回答