草庐IT

linux基础学习笔记三:任务、进程、服务管理

Caucher 2023-03-28 原文

4.1 定时任务

linux定时任务由crond这个服务管理,Crond每分钟执行三个位置的脚本:

  • /etc/crontab:系统相关的,由root直接编写
  • /etc/cron.d/*:自定义的软件相关
  • /var/spool/cron/*:用户用crontab -e命令编写的定时任务。

定时任务执行的日志位于:/var/log/cron
关于crontab -e日期编写:,表示多个时间,-表示一段时间,*/5表示每5个时间单位做一次。

4.2 任务管理

在一个shell中,如果任务都在前台执行,那一个shell只能执行一个任务,效率低下。一种方式是将任务放到【后台】执行,但注意这里的后台指的是shell的后台,也是shell的子进程,并非是系统的后台。

  • &:只需在命令后面加入这个符号,即可转入后台执行,但是stdout和stderr依然会输出到前台命令行上。在执行结束后,也会有任务结束的提示。
  • jobs:任务执行时,会产生一个job id,注意不是pid,上述后台执行时,会产生类似[1] 19888类似的输出,表示的就是job id和pid。jobs这个命令就是显示所有后台任务的状态和对应的命令,参数-l会额外显示pid。
  • [ctrl]+z:这个热键可以将前台正在执行的任务暂停,放到后台去;
  • fg %job id:这个命令将一个后台任务拿到前台来继续执行;
  • bg %job id:这个命令将一个后台任务在后台继续执行,相当于给命令后面加了一个&
  • kill %job id:可以杀掉一个任务,常见的参数有-1重启进程,-9强制杀掉,-19暂停运行([ctrl]+z
    • killall bash:可以杀掉用bash启动的所有任务,通常用来终止任务;
    • 但注意kill并不是杀掉的意思,而是向进程发送信号。
  • nohup:上面我们提到,即使放到后台,也是shell的后台,一旦shell关掉了,所有的任务也就都关了。为了避免和shell关联,可以用nohup。但是注意nohup是不支持shell内置命令的。

4.3 进程管理

进程有五种状态:R:running(运行),S:sleeping(挂起),D:阻塞,T:后台暂停状态或者在跟踪状态,Z:僵尸状态。

  • ps -l:当前shell的相关进程,ps aux查看所有运行的进程。
  • pstree -p:进程树
    • 能观察到所有进程都是1号进程systemd的子进程。
  • top
    • f调显示的项目;
    • 1:查看各个CPU的负载情况;
    • -p pid:参数可以查看某一个进程的情况
    • eE用来调内存单位;
    • M按照内存使用排序,P按照CPU使用排序;
    • VIRT:进程申请使用的内存,不是实际使用的,意义不大;
    • RES:进程的常驻内存,包含SHR,但不包含SWAP
    • SHR:多核之间的共享内存,通常是共享库函数;
    • TIME+:累计CPU时间,注意不是运行时间,是占用CPU的时间,多核程序会累计在多个CPU上的时间。
    • 系统负载和每秒内运行的任务数相关。
  • 进程的优先级:进程一般都有一个优先级,由linux计算,值越小越先执行,具体来说会有一个PR值,由系统设置无法改动,还有一个NICE值(NI),可以由用户微调。使用nicerenice命令可以调整。
  • free -m查看内存信息
  • netstat:查看网络信息,分成两部分,一部分是真的网络连接(type为tcp/udp),一部分是本机的进程间通信(IPC,type为unix):
    • 网络连接:
      • Recv-Q:接收队列中的消息包数量,Send-Q:发送队列
    • 本地socke
      • RefCnt:关联的进程数;
      • Path:关联的进程路径
    • netstat -ltunp:列出正在侦听的网络连接。
  • dmseg:里面存在内核启动时的信息;
  • vmstat:能对当下系统资源做监控。
  • 有关/proc目录下的信息:
    • 每个进程对应的pid都有一个目录,存储着进程相关信息。比较典型的cmdline存储启动命令,environ存储环境变量。
    • /proc下面还存储着相当多的其他信息,包括cpu,内核版本,文件系统,挂在分区,驱动,等等,是很多命令读取的来源地。
  • fuser -v:可以通过文件找出使用该文件的所有进程;
  • lsof:查看进程使用的文件和设备,侦听的端口。
    • 参数-p:指定pid;参数-c指定命令的名称,支持正则表达式。
    • lsof + 文件名:也可以查看打开该文件的进程,+d表示不递归查询目录,+D则会递归查询。
    • lsof -i可以查看与网络相关的连接,后面可以接具体端口号,比如lsof -i:22-25 -nP,-P可以显示具体的端口号,-n显示具体ip。

4.4 服务管理

linux中服务就是后台守护进程,可能是一个,也可能是多个。

  • 服务的类型:

    • .service:一般服务类型,主要是系统服务。
    • .socket:内部程序IPC的服务。
    • .target:一组.service和/或.socket服务打包成的。
    • .mount:挂载相关的;.path:检测特定目录的服务;.timer:循环执行的服务。
  • 网络服务还会额外对应端口,对应规则在/etc/services

  • 服务管理:systemctl [command] [xxx.service/target]

    • start, stop, restart:启动,停止,重启;
    • reload:重新加载配置;
    • enable, disable:开机自启动, 非自启动;
    • status:状态
  • 查看所有的服务: systemctl

    • --all:也列出没启动的服务
  • 服务的状态:

    • running:运行中;
    • exited:一次性服务,已经结束;
    • listening:等待其他事件触发的服务;
    • inactive:挂掉的服务。

有关linux基础学习笔记三:任务、进程、服务管理的更多相关文章

  1. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

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

  3. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  4. 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..

  5. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  6. ruby - 如何使用 RSpec::Core::RakeTask 创建 RSpec Rake 任务? - 2

    如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake

  7. ruby - 通过 ruby​​ 进程共享变量 - 2

    我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是

  8. 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

  9. 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

  10. ruby-on-rails - 获取 inf-ruby 以使用 ruby​​ 版本管理器 (rvm) - 2

    我安装了ruby​​版本管理器,并将RVM安装的ruby​​实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby​​。有没有办法让emacs像shell一样尊重ruby​​的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el

随机推荐