第九章 linux程序和服务管理

不管在哪个平台下,一个系统是不是优秀的系统,很大的程度取决于系统对第三方服务的管理。优秀的系统有非常多的第三方扩展服务并能够非常方便的进行安装和管理。linux作为优秀的服务器系统,有着丰富的第三方扩展,方便的管理,在开发的过程中,能够在管理第三方服务中节省大量的时间。

第三方扩展管理

在linux中大部分的第三方扩展服务都是开源的,可以下载源代码并进行编译安装,但是这种安装程序的做法步骤太多,而且有些开源程序依赖于第三方,在编译的过程中会出现很多的问题。如果在这个第三方扩展服务不太熟悉的情况下,建议不用编译源代码的方式安装第三方扩展。

很多公共的部门维护着linux的软件源,从软件源上,linux会根据自己的版本下载最新的时候本系统的第三方服务,并下载该第三方服务所依赖的项目。如需要安装内存数据库memcached,可使用该命令

sudo apt-get install memcached

apt-get install是在ubuntu下安装第三方服务的命令,在该命令下ubuntu会先查看本机是否已经安装了memcached,如果未安装会在各个默认的软件源下寻找适合的memcached,并判断需要的安装依赖项。

root@ubuntu:/etc/nginx# apt-get install memcached
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libevent-2.0-5
Suggested packages:
  libcache-memcached-perl libmemcached libanyevent-perl libyaml-perl libterm-readkey-perl
The following NEW packages will be installed:
  libevent-2.0-5 memcached
0 upgraded, 2 newly installed, 0 to remove and 90 not upgraded.
Need to get 203 kB of archives.
After this operation, 552 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libevent-2.0-5 amd64 2.0.21-stable-2ubuntu0.16.04.1 [114 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 memcached amd64 1.4.25-2ubuntu1.2 [89.0 kB]                                                                             
Fetched 203 kB in 21s (9,591 B/s)                                                                                                                                                           
Selecting previously unselected package libevent-2.0-5:amd64.
(Reading database ... 75124 files and directories currently installed.)
Preparing to unpack .../libevent-2.0-5_2.0.21-stable-2ubuntu0.16.04.1_amd64.deb ...
Unpacking libevent-2.0-5:amd64 (2.0.21-stable-2ubuntu0.16.04.1) ...
Selecting previously unselected package memcached.
Preparing to unpack .../memcached_1.4.25-2ubuntu1.2_amd64.deb ...
Unpacking memcached (1.4.25-2ubuntu1.2) ...
Processing triggers for libc-bin (2.23-0ubuntu9) ...
Processing triggers for systemd (229-4ubuntu19) ...
Processing triggers for ureadahead (0.100.0-19) ...
Processing triggers for man-db (2.7.5-1) ...
Setting up libevent-2.0-5:amd64 (2.0.21-stable-2ubuntu0.16.04.1) ...
Setting up memcached (1.4.25-2ubuntu1.2) ...
Processing triggers for libc-bin (2.23-0ubuntu9) ...
Processing triggers for systemd (229-4ubuntu19) ...
Processing triggers for ureadahead (0.100.0-19) ...

apt-get install 发现安装memcached ,需要先libevent,并根据memcached 选择libevent的版本,自动的帮助我们节省了很多时间在软件的安装上。

其中对软件源的管理,在ubuntu中,/etc/apt/sources.list 中管理软件的源地址,通常可以修改源地址,把它配置到国内的源地址,这样下载软件速度会更快。

在修改配置之前,一般都会对原有的配置先进行备份:

cd /etc/apt
sudo cp sources.list sources.list.backup

寻找可靠的源地址,用vim修改sources.list,如下:

deb http://archive.ubuntu.com/ubuntu/ raring main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ raring-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ raring-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ raring-proposed main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ raring-backports main restricted universe multiverse

修改完sources.list后,用apt更新源:

sudo apt-get update

更新完以后,可以使用apt进行软件的安装了。

除了 apt-get install 的命令外,还有如下的命令:

常用的APT命令参数

  • apt-cache search package 搜索包
  • apt-cache show package 获取包的相关信息,如说明、大小、版本等
  • apt-cache depends package 了解使用依赖
  • apt-cache rdepends package 查看该包被哪些包依赖
  • sudo apt-get install package 安装包
  • sudo apt-get install package --reinstall 重新安装包
  • sudo apt-get -f install 修复安装"-f = --fix-missing"
  • sudo apt-get remove package 删除包
  • sudo apt-get remove package --purge 删除包,包括删除配置文件等
  • sudo apt-get update 更新源
  • sudo apt-get upgrade 更新已安装的包
  • sudo apt-get dist-upgrade 升级系统
  • sudo apt-get dselect-upgrade 使用 dselect 升级
  • sudo apt-get build-dep package 安装相关的编译环境
  • apt-get source package 下载该包的源代码
  • sudo apt-get clean && sudo apt-get autoclean 清理无用的包
  • sudo apt-get check 检查是否有损坏的依赖

在ubuntu下,使用apt命令很容易的管理第三方扩展,是一套容易掌握的对第三方扩展管理的命令。不同的平台对软件源的管理命令不太一样,在centos下使用的是yum命令。

进程管理

如何对进程进行管理在编程的过程中起到关键的作用,如有时候发现某个第三方服务有问题了以后,可以查看进程是否还存在系统中,查看第三方库的配置文件和日志信息。

使用apt安装完第三方服务后,一般情况都会把启动的信息配置在/etc/init.d下,

root@ubuntu:/etc/nginx# /etc/init.d/memcached 
Usage: /etc/init.d/memcached {start|stop|restart|force-reload|status}

启动memcached

root@ubuntu:/etc/nginx# /etc/init.d/memcached start
[ ok ] Starting memcached (via systemctl): memcached.service.

ps 查看 进程信息,查看内存数据库mecache信息:

root@ubuntu:/etc/nginx# ps ax | grep mem
 44621 ?        Ssl    0:00 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1
 44782 pts/1    S+     0:00 grep --color=auto mem

发现memcached的进程,并能简单的看出memcached 的一些启动配置信息,其中进程id为44621,如果想结束该进程,

kill -9 44621 

进程工作排程

就像安装计划工作一样,有些工作需要在某个时间点出发,有些工作需要重复性的进行,linux中有专门的进程工作排程。

crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

每一个用户都有一个对应的任务配置文件,存放在/var/spool/cron/crontabs/,crond进程每一分钟都会读取每个用户的配置信息,并执行符合要求的程序配置。

使用crontab -e 配置计划任务信息,如下是一条

02 10 * * * cd /data/for_tools/monitor_sql; python monitor_sql.py >> app.log 2>&1

各个参数的含义如下:

根据参数可以知道,上面一条语句的意思是,在每天的10点02分执行/data/for_tools/monitor_sql; python monitor_sql.py,并不日志放到/data/for_tools/monitor_sql 下的app.log 中。

根据各个参数可以配置出,

  • *号,代表这参数所有的情况都执行,
  • */ 数字,表示间隔多长时间执行一次,
  • 数字,数字,表示在这些数字下都满足条件,都执行

如下

*/5 4 1,10,22 * * /etc/init.d/smb restart

表示每月1、10、22日的4 点钟,每隔5分钟重启smb 。

查看计划任务的命令为:

root@ubuntu:/etc/nginx# crontab -l
# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command
02 10 * * * cd /data/for_tools/monitor_sql; python monitor_sql.py >> app.log 2>&1

在设置crontab的时候,经常碰到在命令模式下运行的很好,而在计划任务下,执行不起来,这可能是路径的配置问题,为了使环境和命令模式下有相同的路径,通常在配置计划任务是,直接cd到该程序的目录下进行。如果还是没有执行,可以查看crontab的日志,日志通常在目录/var/log/cron下。


所有评论

写了这么多年博客,收到的优秀评论少之又少。在这个属于 SNS 的时代也并不缺少向作者反馈的渠道。

还没有评论

撰写评论