前面一篇总结了进程的查看和操作,我们再来看看Ubuntu里面查看和操作服务,在查看和操作服务前,我们先看几个关于进程和服务的定义。
一、程序、进程和服务的概念区分
1、 程序
这里的程序主要指应用程序,编写好的一段代码,这里介绍程序,主要是为了后面和进程做区分。
2、进程
操作系统最核心的概念就是进程。其实进程简单来说就是在操作系统中运行的程序,它是操作系统资源管理的最小单位。但是进程是一个动态的实体,它是程序的一次执行过程。我们如何产生一个进程呢?很简单的,就是“执行一个程序或指令”就会触发一个事件而取得一个PID。我们知道系统只认识二进制文件,那么当我们要让系统执行某个工作时,就需要启动(加载)某个二进制文件了。
3、服务
常驻内存的程序就会被我们称之为服务(daemon),服务一般都是一直在运行的命令,其独立于控制终端,不受前台和终端的控制,在后台周期性地执行某种任务或等待处理某些发生的事件。运行服务的进程通常被成为后台进程(守护进程)。服务由service启动,并配置。使用上通常由systemctl命令进行控制。常驻内存的程序:一般是系统或网络服务,例如工作调度的文件/etc/crontab,我们知道系统每分钟都会去扫描/etc/crontab以及相关的配置文件,来进行工作调度;常见的系统服务:crond,atd,rsyslogd,这些进程都是结果带d,daemon的缩写;Linux希望我们可以简单的判断该程序是否为daemon,所以一般daemon的程序都会加上d在文件名后;常见的网络服务:通常会启动一个负责网络监听的端口;
4、进程和程序的区别
进程是动态的,程序是静态的,进程是运行中的程序;
而程序是一些保存在硬盘上的可执行代码。
5、进程与服务的区别
进程在执行完任务就会死亡(关闭窗口或执行完命令),因此只会在内存中停留一会儿;
服务是一直在内存中运行着的进程;
二、服务分类
服务(service) 本质就是进程,但是是运行在后台的,因此我们又称为守护进程,是 Linux 中非常重要的知识点。系统的服务分类非常多,大致分为系统本身所需的系统服务、网络服务等。
1.系统服务
常见的系统服务:crond、atd、rsyslogd等等
2.网络服务
网络服务通常会启动一个负责网络监听的端口,等待其它程序的请求。常见的网络服务:tomcat、named、postfix、vsftpd等,结束服务也可以直接杀死其后台的进程。
三、服务操作命令
1、service指令:
service 服务名 [start | stop | restart | reload | status]
2、systemctl指令:
systemctl [start | stop | restart | reload | status] 服务名
示例:
service postgresql status
systemctl status postgresql

关于服务状态可以看到上图里面有loaded、active等,下面解释一下:
loaded ##系统服务已经初始化完成,加载过配置
active(running) ##正有一个或多个程序正在系统中执行, vsftpd就是这种模式
atcive(exited) ##僅執行一次就正常結束的服務, 目前並沒有任何程序在系統中執行
atcive(waiting) ##正在執行當中,不過還再等待其他的事件才能继续处理
inactive ##服务关闭
enbaled ##服务开机启动
disabled ##服务开机不自启
static ##服务开机启动项不可被管理
failed ##系统配置错误
3、chkconfig指令
查看/设置服务运行状态级别
a、查询所有服务:chkconfig --list
b、查看特定服务运行级别/运行状态(以sshd为例):
chkconfig --list | grep 服务名

c、设置某个服务在某个运行状态下是否自启动
chkconfig --level 运行级别(0-6) on/off
需要注意的是Ubuntu 20.04默认安装不支持chkconfig,需要安装一下
四、Ubuntu没有chkconfig服务解决办法
ubuntu下chkconfig命令可以使用sysv-rc-conf 服务管理程序代替,只需要apt安装即可.
(1)添加镜像源
若在apt安装时,出现E: 无法定位软件包异常, 则需要添加镜像源。具体步骤如下
vim /etc/apt/sources.list
在sources.list 文件末尾添加镜像源:
deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse
更新安装源
sudo apt-get update
(2)安装 sysv-rc-conf
sudo apt-get install sysv-rc-conf

(3)链接 chkconfig
复制sysv-rc-conf文件为chkconfig :
sudo cp /usr/sbin/sysv-rc-conf /usr/sbin/chkconfig
(4)过程中遇到的问题
运行chkconfig --list报错:
Can't create /var/lib/sysv-rc-conf : Permission denied at /usr/sbin/chkconfig line 454.
这是由于sysv-rc-conf 没有权限在/var/lib/下创建chkconfig文件, 因此需要sudo权限运行chkconfig

五、chkconfig与Ubuntu运行级别
关于运行级别简单地说,比如你安装了mysql,并且你把启动的脚本放在了/etc/rc.d/init.d目录下,有时候你需要开机自动启动它,而有时候则不需要,因此,就可以使用chkconfig命令来进行控制,这个命令就相当于一个开关,不过这个开关有6个档,表示在不同级别下的运行状态是on还是off。
Ubuntu(基于debian)有8个运行级别,比其他非debian系统多一个S级。

Ubuntu的默认开机的runlevel是5,也就是用使用GUI显示管理器正常启动系统,可以用’runlevel’命令来查看当前的默认运行级别。

也就是看什么级别的时候需要自启动该服务,那么就需要修改配置,将对应的级别设置为on,可以通过命令设置,也可以通过修改文件设置。

对于chkconfig和运行级别更详细解释请参考:https://www.cnblogs.com/yongxingg/p/3651859.html
附录:
1、systemctl命令
systemctl list-units ##列出当前系统服务的状态
systemctl list-unit-files ##列出服务的开机状态
systemctl status postgresql ##查看指定服务的状态
systemctl stop postgresql ##关闭指定服务
systemctl start postgresql ##开启指定服务
systemctl restart postgresql ##从新启动服务
systemctl enable postgresql ##设定指定服务开机开启
systemctl disable postgresql ##设定指定服务开机关闭
systemctl reload postgresql ##使指定服务从新加载配置
systemctl list-dependencies postgresql ##查看指定服务的倚赖关系
systemctl mask postgresql ##冻结指定服务
systemctl unmask postgresql ##启用服务
systemctl set-default multi-user.target ##开机不开启图形
systemctl set-default graphical.target ##开机启动图形
3、service命令
查看当前所有服务:service --status-all
开启当前服务:service 服务名 start
关闭当前服务:service 服务名 stop
重启当前服务:service 服务名 restart
查看当前服务状态:service 服务名 status
2、chkconfig用法
chkconfig命令可以用来检查、设置系统的各种服务
使用语法:
chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset]
参数用法:
--add增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。
--del删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。
--level<等级代号>à指定读系统服务要在哪一个执行等级中开启或关毕。
使用范例:
chkconfig --list #列出所有的系统服务
chkconfig --add httpd #增加httpd服务
chkconfig --del httpd #删除httpd服务
chkconfig --level httpd 2345 on #把httpd在运行级别为2、3、4、5的情况下都是on(开启)的状态。
chkconfig命令提供了一种简单的方式来设置一个服务的运行级别。例如,为了设置MySQL服务器在运行级别3和4上运行,你必须首先将MySQL添加为受chkconfig管理的服务:
chkconfig --add mysql
现在,我们在级别3和5上设定服务为“on”
chkconfig --level 35 mysql on
在其他级别上设为off
chkconfig --level 01246 mysql off
为了确认你的配置被正确的修改了,我们可以列出服务将会运行的运行级别,如下所示:
#chkconfig --list mysql
mysql 0:off 1:off 2:off 3:on 4:off 5:on 6:off
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除
所以我开始关注ruby,很多东西看起来不错,但我对隐式return语句很反感。我理解默认情况下让所有内容返回self或nil但不是语句的最后一个值。对我来说,它看起来非常脆弱(尤其是)如果你正在使用一个不打算返回某些东西的方法(尤其是一个改变状态/破坏性方法的函数!),其他人可能最终依赖于一个返回对方法的目的并不重要,并且有很大的改变机会。隐式返回有什么意义?有没有办法让事情变得更简单?总是有返回以防止隐含返回被认为是好的做法吗?我是不是太担心这个了?附言当人们想要从方法中返回特定的东西时,他们是否经常使用隐式返回,这不是让你组中的其他人更容易破坏彼此的代码吗?当然,记录一切并给出
给定以下方法:defsome_method:valueend以下语句按我的预期工作:some_method||:other#=>:valuex=some_method||:other#=>:value但是下面语句的行为让我感到困惑:some_method=some_method||:other#=>:other它按预期创建了一个名为some_method的局部变量,随后对some_method的调用返回该局部变量的值。但为什么它分配:other而不是:value呢?我知道这可能不是一件明智的事情,并且可以看出它可能有多么模棱两可,但我认为应该在考虑作业之前评估作业的右侧...我已经在R
我在我的Rails3示例应用程序上使用CarrierWave。我想验证远程位置上传,因此当用户提交无效URL(空白或非图像)时,我不会收到标准错误异常:CarrierWave::DownloadErrorinImageController#createtryingtodownloadafilewhichisnotservedoverHTTP这是我的模型:classPaintingtrue,:length=>{:minimum=>5,:maximum=>100}validates:image,:presence=>trueend这是我的Controller:classPaintingsC