Linux 服务管理
Crontab周期性任务
at
可以一次性执行。service atd status
,它可以使用黑名单和白名单控制,参见/etc/at.deny,at.allow
。
1 | $ at now+5 minutes |
同理crontab也有访问控制文件cron.deny
等。
系统服务crond每分钟会从配置文件中刷新定时任务。
1 | $ crontab -l # 列出任务,-r 清空 |
crontab -e
可以编辑计划任务。在最后追加
1 | # 每分钟输出系统时间到文件 |
以root身份执行下列命令
1 | $ crontab -e |
查看crond的日志文件可以发现每次都是新启动了一个进程。
配置文件
/etc/crontab
,/etc/crond/filename
,这两个是系统级的定时任务,使用crontab -l
命令无法列出。
在/etc/crontab
中实际上是指定了MAILTO=root
,即将定时任务执行的结果发送给root,我们可以查看/var/spool/mail/root
文件。
1 | */1 * * * * root echo "job in the /etc/crontab" |
crontab -l
命令列出的任务实际上位于/var/spool/cron/username
文件。
crontab最小单位是1分钟,如何让每0.5分钟执行一次?其实可以配置sleep
命令。
1 | */1 * * * * date >> /tmp/tmp.date |
/usr
其实不是user的缩写,而是Unix System Resource的缩写。
系统定时任务我们也可以将脚本拷贝到/etc/cron.daily|hourly|monthly|weekly
中将被anacron自动管理,推荐使用这种方式。
anacron配置
如果执行定时任务之前宕机了,anacron会自动判断是否需要重新执行定时任务。其配置文件位于/etc/anacrontab
。
Linux服务管理
系统运行级别可以使用runlevel
查看,可以使用init level
进入特定的运行级别。
/etc/services
文件写了常规服务和端口的映射。
1 | $ chkconfig --list | grep nginx |
第二种方式设置开机自启动可以编辑配置文件/etc/rc.d/rc.local
(别忘了赋予可执行权限),该文件和/etc/rc.local
是一个软链接,修改哪个都一样。
进程管理
有计划重启服务器是系统维护的重要原则。
ps aux
中TIME指的是进程占用CPU的时间,使用pstree -pu
可以显示进程树(包含用户名和pid)。top
命令支持交互模式(P,CPU排序,M,内存排序,N,pid排序),该命令的前5行解释如下:
1 | top - 20:19:51 up 19 days, 16:38, 2 users, load average: 0.15, 0.19, 0.18 # 1min,5min,15min的平均负载,单核不能大于1,双核不能大于2 |
w
命令可以查看登陆到当前系统中的用户,使用pkill
可以按照登陆的终端号踢出用户,例如:pkill -9 -t tty1
工作管理
就是将程序放到后台执行。将程序放入后台有2种方法:
- 在执行的命令后面加上
&
(后台运行); - 执行命令后按下
Ctrl+Z
(后台暂停)。
放入后台后可以使用jobs -l
命令查看后台工作(+
表示最后一个放入到后台的工作,-
表示倒数第二个)。需要注意的是放入后台的任务不能和用户交互。fg %工作号
将后台挂起的进程恢复到前台执行;bg %工作号
用于将后台暂停的工作(Ctrl+Z)恢复到后台执行。
touch
命令并不是新建文件,而是修改文件的时间戳。
把命令放入后台执行只能在当前终端执行,一旦退出或者关闭终端后台程序就会终止(发送了SIGHUB信号)!标准方法是使用
nohub 命令 &
。
time
命令用于统计程序的运行时间,包括用户态和内核态。详见:开源中国。
Linux上源码安装的3个步骤是./configure && make && make install
,在configuration的时候可以使用-h
查看编译选项。