在亚马逊linux实例上,我有两个调用的脚本start_my_app
,stop_my_app
它们永远启动和停止(这反过来运行我的node.js应用程序).我使用这些脚本手动启动和停止我的节点应用程序.到现在为止还挺好.
我的问题:我也想设置它,以便start_my_app
在系统启动时运行.我知道我需要在里面添加一个文件init.d
,我知道如何将它符号链接到其中的正确目录rc.d
,但无法弄清楚我放入的文件中究竟需要的内容init.d
.我认为它应该只是一行,比如start_my_app
,但这对我来说并不适用.
如何在Linux系统中很好地配置Spring Boot应用程序打包为可执行jar作为服务?这是推荐的方法,还是应该将此应用程序转换为war并安装到Tomcat中?
目前我可以从screen
会话中运行Spring启动应用程序,这很不错,但需要在服务器重启后手动启动.
我正在寻找的是一般建议/方向或示例init.d
脚本,如果我使用可执行jar的方法是正确的.
服务默认root
在我的RHEL框上启动时启动.如果我没记错的话,对于使用init脚本的其他Linux发行版也是如此/etc/init.d
.
您认为最好的方法是让流程作为我选择的(静态)用户运行?
我到达的唯一方法是使用类似的东西:
su my_user -c 'daemon my_cmd &>/dev/null &'
Run Code Online (Sandbox Code Playgroud)
但这似乎有点凌乱......
是否有一些隐藏的魔法可以提供一种简单的机制来自动启动服务,就像其他非root用户一样?
编辑:我应该说我在这个实例中开始的过程是Python脚本或Java程序.我宁愿不在它们周围写一个原生包装器,所以不幸的是我无法像Black建议的那样调用setuid().
我使用init脚本来运行一个简单的进程,该进程以:
start-stop-daemon --start --quiet --chuid $DAEMONUSER \
--make-pidfile --pidfile $PIDFILE --background \
--exec $DAEMON $DAEMON_ARGS
Run Code Online (Sandbox Code Playgroud)
名为$ DAEMON的进程通常将日志信息打印到其标准输出.据我所知,这些数据没有存储在任何地方.
我想将$ DAEMON的stdout写入或附加到某个文件中.
我知道的唯一解决方案是告诉start-stop-daemon直接调用一个shellscript而不是$ DAEMON; 然后脚本调用$ DAEMON并写入日志文件.但这需要一个额外的脚本,就像修改守护进程本身一样,似乎是解决这种常见任务的错误方法.
什么是start-stop-daemon以及如何使用它?
我正在尝试自动运行特定程序.只要系统启动,程序就应该运行.为此,我正在编写脚本/etc/init.d/
.
我有一个我想要守护的Perl脚本.基本上,这个perl脚本每30秒读取一个目录,读取它找到的文件,然后处理数据.为了简单起见,请考虑以下Perl脚本(称为synpipe_server,此脚本的符号链接/usr/sbin/
):
#!/usr/bin/perl
use strict;
use warnings;
my $continue = 1;
$SIG{'TERM'} = sub { $continue = 0; print "Caught TERM signal\n"; };
$SIG{'INT'} = sub { $continue = 0; print "Caught INT signal\n"; };
my $i = 0;
while ($continue) {
#do stuff
print "Hello, I am running " . ++$i . "\n";
sleep 3;
}
Run Code Online (Sandbox Code Playgroud)
所以这个脚本基本上每3秒打印一次.
然后,因为我想要守护这个脚本,我还把这个bash脚本(也称为synpipe_server)放在/etc/init.d/
:
#!/bin/bash
# synpipe_server : This starts and stops synpipe_server
#
# chkconfig: 12345 12 88
# description: Monitors …
Run Code Online (Sandbox Code Playgroud) 我已经从一个内置的src nginx 1.2.6安装转移到了Ubuntu 13.04上的1.4.1.
通过Ubuntu PPA安装,http: //wiki.nginx.org/Install#Ubuntu_PPA .这一切都很有效.
手动,我可以使用重新加载/启动/停止服务
sudo service nginx <command>
Run Code Online (Sandbox Code Playgroud)
服务器重启后,nginx不会自行启动.
在我之前的手动安装中,我在/ etc/init中有一个手写的Upstart脚本,运行正常.PPA安装已经设置了/etc/init.d/脚本,所以我想坚持使用PPA方法而不是黑客入侵.
可能是因为我对服务界面不是很熟悉,所以我缺少了一些东西.
我还检查了/var/log/nginx/access.log和error.log,看到在启动过程中没有记录任何内容.
我该怎么做才能解决这个问题?
我有安装了nginx 1.0.11的Ubuntu 11.04 i386服务器.另外,我正在使用这个init.d脚本,这是我在几个不同的地方找到的唯一脚本.它很好地启动服务器,然而,在停止/重置它说
* Stopping Nginx Server... [fail]
Run Code Online (Sandbox Code Playgroud)
当然,守护程序不会停止,重新启动时不会重新加载配置.
我该怎么修呢?
我创建了一个作为deamon运行的linux服务(并从/etc/init.d/X开始).我需要设置一些可以被应用程序访问的环境变量.
这是场景.该应用程序是一组Perl AGI脚本,依赖于(因此需要以asstisk用户身份运行)asterisk用户,但asterisk没有shell.理想情况下,我只需在/home/asterisk/.bashrc中设置它,但星号不存在.
如何在星号用户的运行环境中为我的应用设置环境变量,以便我的应用可以使用它们?
当我启动一个实例时,我真的希望能够使用ec2-init脚本来做一些内务处理.理想情况下,我希望能够传递用户数据来设置主机名并运行几个初始化脚本(配置木偶等).
我看到一个名为ec2-set-hostname的脚本,但我不确定你是否可以用它来设置用户数据的任意主机名或者用户数据的格式需要什么.
任何人都使用这些脚本并知道如何设置主机名并同时运行一些脚本?
提前致谢.