草庐IT

Ubuntu下怎么查看和操作服务

CAE虚拟与现实 2023-08-29 原文

前面一篇总结了进程的查看和操作,我们再来看看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

有关Ubuntu下怎么查看和操作服务的更多相关文章

  1. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用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请求没有正确的命名空间。任何人都可以建议我

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的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

  4. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在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

  5. ruby - 如何在 Ubuntu 中清除 Ruby Phusion Passenger 的缓存? - 2

    我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:

  6. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  7. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

    您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

  8. ruby - Ruby 中的隐式返回值是怎么回事? - 2

    所以我开始关注ruby​​,很多东西看起来不错,但我对隐式return语句很反感。我理解默认情况下让所有内容返回self或nil但不是语句的最后一个值。对我来说,它看起来非常脆弱(尤其是)如果你正在使用一个不打算返回某些东西的方法(尤其是一个改变状态/破坏性方法的函数!),其他人可能最终依赖于一个返回对方法的目的并不重要,并且有很大的改变机会。隐式返回有什么意义?有没有办法让事情变得更简单?总是有返回以防止隐含返回被认为是好的做法吗?我是不是太担心这个了?附言当人们想要从方法中返回特定的东西时,他们是否经常使用隐式返回,这不是让你组中的其他人更容易破坏彼此的代码吗?当然,记录一切并给出

  9. ruby - 怎么来的(a_method || :other) returns :other only when assigning to a var called a_method? - 2

    给定以下方法:defsome_method:valueend以下语句按我的预期工作:some_method||:other#=>:valuex=some_method||:other#=>:value但是下面语句的行为让我感到困惑:some_method=some_method||:other#=>:other它按预期创建了一个名为some_method的局部变量,随后对some_method的调用返回该局部变量的值。但为什么它分配:other而不是:value呢?我知道这可能不是一件明智的事情,并且可以看出它可能有多么模棱两可,但我认为应该在考虑作业之前评估作业的右侧...我已经在R

  10. ruby-on-rails - 我该怎么办 :remote location validation with CarrierWave? - 2

    我在我的Rails3示例应用程序上使用CarrierWave。我想验证远程位置上传,因此当用户提交无效URL(空白或非图像)时,我不会收到标准错误异常:CarrierWave::DownloadErrorinImageController#createtryingtodownloadafilewhichisnotservedoverHTTP这是我的模型:classPaintingtrue,:length=>{:minimum=>5,:maximum=>100}validates:image,:presence=>trueend这是我的Controller:classPaintingsC

随机推荐