在 Linux 系统中,服务是指在后台运行的一类程序,它们能够在系统启动时自动运行,并提供某些特定的功能,比如 web 服务器、数据库服务器等。常规的服务运行方式是在命令行终端中运行命令,但在实际应用中,我们经常需要将服务作为一个守护进程在后台运行,从而使得服务的运行更加稳定,同时也可以让我们更加方便地管理和监控服务。本文将探讨如何在 Linux 系统中实现服务后台运行,以提高系统的稳定性。
一、Linux 服务的运行方式
在 Linux 系统中,服务通常会以两种方式运行:前台运行和后台运行。
前台运行是指将服务作为一个常规的程序在命令行终端中直接运行。在这种方式下,服务会一直占用当前的终端窗口,直到服务结束或者手动终止。前台运行的优点是方便调试和检查问题,但同时也存在一些缺点,比如暴露服务的启动命令和参数,风险更大;由于服务在终端中运行,因此无法在退出终端后继续运行。
后台运行是指将服务运行在后台作为守护进程运行。在这种方式下,服务会在启动后自动隐藏在后台,无需终端界面进行操作,直到手动终止或者服务器重启。后台运行的优点是更加安全、便捷,服务可持续运行,同时也难以被用户意外关闭,从而增加了系统运行的稳定性。
二、常见的后台运行方式
在 Linux 系统中,常见的后台运行方式主要有以下两种:
1. 使用 & 符号
& 符号可以将服务放入后台保持运行,例如:
$ nohup command &
nohup 命令用于在服务结束了终端会话后依旧运行服务。& 符号用于将服务放入后台运行。
此种方式的缺点是无法对服务进行关闭、重启等操作,对于后台运行服务的管理不够方便。
2. 使用守护进程
守护进程是 Linux 下一种运行在后台的服务进程,其特点是在启动后从父进程脱离,运行独立于终端。因此,用户可以在关闭终端后进一步控制或关闭守护进程。
启动一个守护进程服务需要用到一些 shell 脚本和一些常见的 Linux 命令:
step 1 创建一个脚本文件,用于启动和停止服务;
step 2 修改脚本文件的权限,允许执行;
step 3 使用命令“chkconfig”将脚本注册为服务;
step 4 启动和停止服务的命令为 service。
使用守护进程的方式可以更加方便安全地管理服务,提高了系统的稳定性。
三、案例分析
以 CentOS 7 为例,下面介绍如何使用守护进程的方式实现服务后台运行。
1. 创建一个脚本文件
在 /etc/init.d/(CentOS7 以前为 /etc/rc.d/init.d/)目录下创建一个脚本文件,例如:
$ vi /etc/init.d/myservice
脚本内容参考如下:
#!/bin/bash
# chkconfig: 345 99 1
# description: myservice
start(){
echo “myservice start”
# 启动服务
}
stop(){
echo “myservice stop”
# 停止服务
}
restart(){
echo “myservice restart”
stop
sleep 1
start
}
case “$1” in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $”Usage: $0 {start|stop|restart}”
exit 1
esac
将上述脚本文件保存并退出。
2. 修改脚本文件权限
使用 chmod 命令更改文件权限:
$ chmod +x /etc/init.d/myservice
3. 注册脚本文件为服务
使用 chkconfig 命令将脚本注册为系统服务:
$ chkconfig –add myservice
$ chkconfig myservice on
4. 启动和停止服务
使用 service 命令即可启动和停止服务:
$ service myservice start
$ service myservice stop
使用守护进程的方式可以将服务启动在后台运行,并且可以通过 service 命令启动和停止服务,比使用 & 符号的方式更加方便管理。
四、
Linux 服务的后台运行是 Linux 系统中一个非常重要的特性,它可以将服务保持在后台运行,有利于系统稳定性和便捷性。在本文中,我们探讨了 Linux 中服务的运行方式以及常见的后台运行方式,并以 CentOS 7 为例,介绍了使用守护进程的方式实现服务后台运行的方法。我们相信,通过本文的介绍,读者可以更加深入地了解 Linux 服务的后台运行方式,并能够更加方便地管理系统服务,提高系统的稳定性。
相关问题拓展阅读:
如运行一个火狐浏览器 直接在终端:亏哪高firefox &
jobs查看在后台执行的进程
fg %n将后台执行进程n调到前台执行,n表示jobnumber(通过jobs查看的进程编号,而非pid)
ctrl+z将在前台执行的进程,放到后台并挂起
bg %n将在后台缓晌挂起的进程,继续执行
ctrl+c前台进程终止
kill %n杀掉后台运行的进程,n表示jobnumber(通过jobs查看的进程编号,而非pid)命令介绍可查看“Linux命令大全销尺”。
有些时候,我们需要在终端启动一个程序,并使之运行——但是如果关闭终端,那么这个程序也就随着关闭了。那么有没有什么方法在关闭终端后,让已经从这个终端启动的程序继续运行呢?有以下方法
1.让linux忽略终端的hung up 信号,不关闭进程;
2.让此进程变州肆信为终端的非子进程。
方法一:
在终端输入命令:
# ./pso > pso.file 2>&1 &
解释:将pso直接放在后台运行,并把终端输出存放在当前目录下的pso.file文件中。
当客户端关机后重新登陆服务器后,直接查看pso.file文件就可看执行结果(命
令:#cat pso.file )。
或者
在终端输入命令:
# nohup ./pso > pso.file 2>&1 &
解释:nohup就是不挂起的意思,将pso直接放在后台运行,并把终端输出存放在当前
目录下的pso.file文件中。当客户端关机后重新登陆服务器后,直接查看pso.file
文件就可看执行结果(命令:#cat pso.file )。
方法二:
实现方案就是nohup命令。
例如要启动jboss,可以nohup ./run.sh &。这样就可以了,结尾的“&”符号表示后台启动jboss,从而不影响继续运行其他命令。
但这样有一个问题,nohup命令虽然可以让linux“放过”这个进程,但是nohup会同时把进程的控制台输出重定向到nohup.txt下(默认是这个文件),当然可以重定向为其他的文件,但是输出总会有的。
如果jboss运行很长时间,而且如果有很多控制台输出的话,nohup.txt文件就会变的很大很大。
通常项目中的日志都会输出到特定的日志文件或者输出到
数据库
中,也就是说控制台的输出对于程序的意义不大,那么可不可以抛弃掉这些输出呢?答案雹消是肯定的。
这里讲解一下linux的重定向(注意,是linux的重定向,不是针对nohup)。
0、1和2分别表示标准输入、标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出。
在一般使用时,默认的是标准输出,既1.当我们需要特殊用途时,可以使用其他标号。例如,将某个程序的错误信息输出到log文件中:./program 2>log。这样标准输出还是在屏幕上,但是错误信息会输出到log文件中。
另外,也可以实现0,1,2之间的重定向。2>&1:将错误信息重定向到标准输出。
Linux下还有一个特殊的文件/dev/null,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。
结合nohup,我们可以这样
nohup ./run.sh >/dev/null &
这是最简单的一种方式,既保证了程序能够一直后台执行,又能册轮保证不会产生太大的nohup.txt文件。
方法三:
利用的linux的一个机制,让程序在subshell中执行,方法很简单,将命令用括号() 括起来即可。
ps -ef | grep test
可以看到run.sh的父进程为1,不是当前终端了,这样就能忽略hung up信号。
当然linux还可以动态的让程序后台运行或不被hung up 信号关闭,例如disown命令,setid命令等。
方法四:
如果是使用Ubuntu的话,你可以利用CTRL+ALT+T组合键打开终端。当然你也可以使用超级键(Windows键)打开Dash,搜索“TERM”,然后点击“Term”图标来打开终端窗口。
对于其他的桌面环境来说,例如XFCE、KDE、LXDE、Cinnamon以及MATE,你可以在菜单中找到终端。有些环境会在停靠栏或者面板上面包含终端图标。
通常情况下,你可以在终端里面直接输入应用程序名来启动一个应用程序。比如说,你可以通过输入“firefox”来启动Firefox。
在终端启动应用程序的好处是,你可以包含一些额外的参数。
例如,你可以通过下列命令来打开一个Firefox浏览窗口,然后利用默认的搜索引擎搜索相关信息:
firefox -search “linux.cn”
你可能会注意到,如果你启动Firefox,程序打开以后,回到了终端窗口控制,这就意味着你可以继续在终端进行工作。
通常情况下,如果你在终端启动了应用程序,控制会切换到新启动的应用程序,只有程序被关闭以后才会重新切换到终端控制。这是因为你在前台启动了这个程序。
如果要在Linux终端打开应用程序并且返回终端控制,那么你需要将应用程序启动为后台进程。
和下面所列的命令一样,我们可以通过增加一个(&)符号,将应用程序在后台启动。
libreoffice &
译者注:如果需要加参数的话,记得把&符号放在最后。
译者注:一般情况下,关闭终端时,在这个终端启动的后台程序也会被终止,要使终端关闭以后,后台程序依然保持执行可以使用下列命令
nohup command &
如果应用程序目录没有安装在PATH变量包含的目录里面的话,我们就没有办法直接通过应用程序名来启动程序,必须输入应用程序的整个路径来启动它。
/path/to/yourprogram &
如果你不确定程序输入哪个Linux目录结构的话,可以使用find或者location命令来定位它。
可以输入下列符号来找到一个文件:
find /path/to/start/from -name programname
例如,你可以输入下列命令来找到Firefox:
find / -name firefox
命令运行的结果会嗖的一下输出一大堆,别担心,你也可以通过less或者more来进行分页查看。
find / -name firefox | more find / -name firefox | less
当find命令查找到没有权限访问的文件夹时,会报出一条拒绝访问错误,
你可以通过sudo命令来提示权限。当然,如果你没有安装sudo的话,就只能切换到一个拥有权限的用户了。
sudo find / -name firefox | more
如果你知道你要查找的文件在你的当前目录结构中,那么你可以使用点来代替斜杠:
sudo find . -name firefox | more
你可能需要sudo来提升权限,也可能根本就不需要,如果这个文件在你的主目录里面,那么就不需要使用sudo。
有些应用程序则必须要提升权限才能运行,否则你就会得到一大堆拒绝访问错误,除非你使用一个具有权限的用户或者使用sudo提升权限。
这里有个小窍门。如果你运行了一个程序,但是它需要提升权限来操作,输入下面命令试试:
sudo !!
方法五:
在Unix/Linux下如果想让程序独立终端运行,一般都是使用 & 在命令结尾来让程序自动运行。(命令后可以不追加空格)
打开gnome-terminal,执行如下命令:
delectate@delectate:~$ totem & 8510delectate@delectate:~$ 有几点需要注意:
已经启动的程序依然attach于当前pts,只有当前终端模拟器关闭(使用exit命令退出),进程自动被tty继承。delectate@delectate:~$ ps -e | grep totem //程序已被以totem & 形式启动,当前附在pts0上8819 pts/:00:00 totemdelectate@delectate:~$ ps -e | grep totem //pts0的模拟终端被exit命令关闭,totem自动附在tty8819 ?:00:00 totemdelectate@delectate:~$
具有debug输出的进程,需要按enter键进行中断当前debug输出。但是如果程序持续进行printf,你将无法输入任何命令。delectate@delectate:~$ vlc & 8850delectate@delectate:~$ VLC media player 1.0.6 Goldeneye main libvlc: Running vlc with the default interface. Use ‘cvlc’ to use vlc without interface.//enter presseddelectate@delectate:~$ //show a clean terminal now** (:8850): CRITICAL **: giop_thread_request_push: assertion `tdata != NULL’ failed//仍然在输出数据……//关闭程序+ Done vlcdelectate@delectate:~$
你无法记录程序的debug输出结果。
只有当虚拟终端是 $ 或者 # 时候,才可以关闭此终端,否则可能导致已经启动的进程被关闭(按enter——如果程序持续输出信息而没有出现 $ 或 #)
使用nohup命令:
nohup描述:Run COMMAND, ignoring hangup signals.(忽略任何中断/挂起信号,使命令继续执行)
但是当你尝试使用命令:
1nohup command
时候却会遇到不大不小的麻烦……
delectate@delectate:~$ nohup vlcnohup: ignoring input and appending output to `nohup.out’
是的,虽然它自动把debug信息记录到nohup.out文件,但是你却无法使用这个终端进行任何操作。
所以你需要和之一个方法混用,即
nohupcommand {option}&
混用后,它会自动把你执行的命令输出结果记录到权限为-rw——-,名为nohup.out的文件中。
但是你仍然需要
delectate@delectate:~$ nohup vlc & 9045delectate@delectate:~$ nohup: ignoring input and appending output to `nohup.out’ //在这里按一下回车或以ctrl+c以//show a clean terminal delectate@delectate:~$
与使用 “&” 性质相同,当前启动程序的终端如果没有被关闭,已经启动的程序附在pst上;如果终端被关闭,则自动附在tty。
如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out。默认状态下,nohup默认输出到nohup.out文件,你也可以利用重定向来指定输出文件:
nohupcommand {option} > myout.file 2>&1 &
只有当虚拟终端是 $ 或者 # 时候,才可以关闭此终端,否则可能导致已经启动的进程被关闭(按enter——如果程序持续输出信息而没有出现 $ 或 #)
其他相关命令:
jobs:查看当前有多少在后台运行的命令
fg:将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
bg:将一个在后台暂停的命令,变成继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
杀死进程
杀死已经启动的程序和普通方式一样:
pkill -9 name
killall name
kill pid
…
命令应用:
linux服务器挂机下载;启动相关服务;linux服务器启动进程(尤其是ssh登录)
我就曾经用 1nohup aria2c -i downloadlist -m 0 -j 1 &
1. 开机启动时自动运行程序
Linux加载后, 它将初始化硬件和设备驱动, 然后运行之一个进程init。init根据配置文件继续引导过程,启动其它进程。通衡好常情况下,修改放置在
/etc/rc或
/etc/rc.d 或
/etc/rc?.d
目录下的脚本文件,可以使init自动启动其它程序。例如:编辑轿烂/etc/rc.d/rc.local 文件(该文件通常是系统最后启动的脚本),在文件最末加上一行“xinit”或“startx”,可以在开机启动后直接进闭拦漏入X-Window。
2. 登录时自动运行程序
用户登录时,bash先自动执行系统管理员建立的全局登录script :
/ect/profile
然后bash在用户起始目录下按顺序查找三个特殊文件中的一个:
/.bash_profile、
/.bash_login、
/.profile,
1.nohup
用途:不挂断地运行命令。
语法:nohup Command
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。
如果当前目录的 nohup.out 文件不颤枝可写,输出重定向到 $HOME/nohup.out 文件中。
如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。
退出状态:该命令返回下列出口值:
可以查找但不能调用 Command 参数指定的命令。
nohup 命令发生错误或不能查找由 Command 参数指定的命令。
否则,nohup 命令的退出状态是 Command 参数纤洞渣指定命毁悄令的退出状态。
2.&
用途:在后台运行
一般两个一起用
nohup command &
ctrl+Z,把前台文件放入后台并暂停(注意,放旦坦入后台后模改桐是会被暂停的)。
要放入后台,直接在命令后面加歼嫌个&就好(但是注意退出登录状态时程序也会停止)。
所以我日常都是用nohup
命令
&,这个样子去后台运行的。
关于linux 将服务后台运行的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
成都创新互联科技有限公司,是一家专注于互联网、IDC服务、应用软件开发、网站建设推广的公司,为客户提供互联网基础服务!
创新互联(www.cdcxhl.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。创新互联——四川成都IDC机房服务器托管/机柜租用。为您精选优质idc数据中心机房租用、服务器托管、机柜租赁、大带宽租用,高电服务器托管,算力服务器租用,可选线路电信、移动、联通机房等。
文章标题:Linux实现服务后台运行,提升系统稳定性(linux将服务后台运行)
本文路径:http://www.shufengxianlan.com/qtweb/news30/327380.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联