# 进程管理
# 进程查看
# 进程简介
进程是正在执行的一个程序或命令,每个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。每个程序或命令都至少会产生一个进程,比如 ls 命令就会产生一个进程,只是这个进程执行很快。
# 进程管理的作用
- 判断服务器健康状态(cpu、memory、disk)
- 查看系统中所有进程
- 杀死进程(最不常用,我们理应正常关闭进程,只有无法正常关闭时使用这种方法,不要总是 kill)
- 服务器比较多,需要搭建监控服务器
# 查看系统中所有进程
[root@core-pods-3 ~]# ps aux # 查看系统中所有进程,使用 BSD 操作系统格式 | |
# 输出说明 | |
# USER: 该进程是由哪个用户产生的,比如 root 用户产生的 | |
# PID:进程的 ID 号,linux 系统识别进程的唯一有效信息,pid=1 是初始进程(centos6 是 /sbin/init,centos7 是 /usr/lib/systemd/systemd) | |
# % CPU:该进程占用 cpu 资源的百分比,占用越高,进程越耗费资源 | |
# % MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源 | |
# VSZ:该进程占用虚拟内存的大小,单位 KB; | |
# RSS:该进程占用实际物理内存的大小,单位 KB; | |
# TTY:该进程是在哪个终端中运行的。系统进程显示问号,其中 tty1 - tty7 代表本地控制台终端,tty1 - tty6 是本地的字符界面终端,tty7 是图形终端。pts/0-255 代表虚拟终端(意味着最多支持 256 个远程终端)。 | |
# STAT:进程状态。常见的状态有:R - 运行,S - 睡眠,T - 停止,s - 包含子进程,+- 位于后台 | |
# START:该进程的启动时间 | |
# TIME:该进程占用 CPU 的运算时间,注意不是系统时间 | |
# COMMAND:产生此进程的命令名 | |
[root@core-pods-3 ~]# ps -le # 查看系统中所有进程,使用 linux 标准命令格式 |
# 查看系统健康状态
这是一条比较重要的命令,命令是 top [选项]
- -d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒。
在 top 命令的交互模式当中可以执行的命令:
- ? 或 h:显示交互模式的帮助
- P:以 cpu 使用率排序,默认就是此项
- M:以内存的使用率排序
- N:以 PID 排序
- q:退出 top
[root@core-pods-3 ~]# top | |
top - 06:59:32 up 45 days, 1:37, 1 user, load average: 0.00, 0.00, 0.00 | |
Tasks: 114 total, 2 running, 112 sleeping, 0 stopped, 0 zombie | |
%Cpu(s): 0.2 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st | |
KiB Mem : 1031912 total, 165972 free, 215916 used, 650024 buff/cache | |
KiB Swap: 533500 total, 526400 free, 7100 used. 606316 avail Mem | |
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND | |
1 root 20 0 191040 5196 3724 S 0.0 0.5 1:16.77 systemd | |
2 root 20 0 0 0 0 S 0.0 0.0 0:00.29 kthreadd | |
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H | |
6 root 20 0 0 0 0 S 0.0 0.0 0:00.19 ksoftirqd/0 | |
7 root 20 0 0 0 0 S 0.0 0.0 1:07.67 rcu_sched | |
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh | |
9 root 20 0 0 0 0 S 0.0 0.0 0:14.85 rcuos/0 |
说明:
第一行信息为任务队列信息
内容 | 说明 |
---|---|
06:59:32 | 系统当前时间 |
06:59:32 up 45 days, 1:37 | 系统的运行时间,本机已经运行 45 天 1 小时 37 分钟,不一定准,比如断电 |
1 user | 当前登录了 1 个用户 |
load average: 0.00, 0.00, 0.00 | 系统在之前 1 分钟、5 分钟、15 分钟的平均负载。对于单核,一般认为小于 1 时,负载较小。如果大于 1,系统已经超出负荷;如果你是 4 核或 8 核,你可以认为超过 8 才是超负载,这块比较笼统 |
第二行为进程信息
内容 | 说明 |
---|---|
Tasks: 114 total | 系统中的进程总数 |
2 running | 正在运行的进程数 |
112 sleeping | 睡眠的进程 |
0 stopped | 正在停止的进程 |
0 zombie | 僵尸进程。如果不是 0,需要手工检查僵尸进程,意味着这个进程正在终止,但是还没有终止完成 |
第三行为 CPU 信息
内容 | 说明 |
---|---|
%Cpu(s): 0.2 us | 用户模式占用的 cpu 百分比,即 cpu 被用户占了多少 |
0.0 sy | 系统模式占用的 cpu 百分比,即 cpu 被系统占了多少 |
0.0 ni | 改变过优先级的用户进程占用的 cpu 百分比 |
99.8 id | 空闲 cpu 的 cpu 百分比,这个比较重要,如果太少看是否有非法进程,如果没有,你可能要扩容 |
0.0 wa | 等待输入 / 输出的进程的占用 cpu 百分比 |
0.0 hi | 硬中断请求服务占用的 cpu 百分比 |
0.0 si | 软中断请求服务占用的 cpu 百分比 |
0.0 st | st(steal time)虚拟时间百分比。就是当有虚拟机时,虚拟 cpu 等待实际 cpu 的时间百分比 |
第四行为内存信息
内容 | 说明 |
---|---|
KiB Mem : 1031912 total | 物理内存的总量,单位 KB |
165972 free | 空闲的物理内存数量 |
215916 used | 已经使用的物理内存数量,我这边使用的是云主机,总共分配了 1 个 G 的内存,有 215M 内存在使用 |
650024 buff/cache | 作为缓冲的内存数量 |
第五行为交换分区(swap)信息
内容 | 说明 |
---|---|
KiB Swap: 533500 total | 交换分区(虚拟内存)的总大小 |
526400 free | 空闲交换分区的大小 |
7100 used | 已经使用的交互分区的大小 |
606316 avail Mem | 作为缓存的交互分区的大小 |
上面信息主要看:平均负载、cpu 空闲、内存空闲量这 3 个指标,默认是按照 cpu 从大到小排序,如果我们想按内存使用的大小排序,只需要按 shift+M 即可,如果想回去(看 cpu 排序),再按 shift+P 即可,top 命令是比较耗费资源的,开开看一下就行,没必要一直开着,当我们需要的时候瞧一瞧就好了。
# 查看进程树
命令是 pstree [选项]
,选项:
-p:显示进程的 pid
-u:显示进程的所属用户
[root@core-pods-3 ~]# pstree | |
[root@core-pods-3 ~]# pstree -u mysql | |
[root@core-pods-3 ~]# pstree -p 25394 | |
[root@core-pods-3 ~]# top -Hp 25394 # 看 25394 这个进程下所有线程相关资源占用信息,用于线程诊断 |
# 进程管理
# Kill 命令
查看 kill 支持的信号
[root@core-pods-3 ~]# kill -l | |
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP | |
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 | |
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM | |
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP | |
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ | |
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR | |
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 | |
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 | |
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 | |
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 | |
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 | |
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 | |
63) SIGRTMAX-1 64) SIGRTMAX |
常用信号列举:
信号代号 | 信号名称 | 说明 |
---|---|---|
1 | SIGHUP | 该信号让进程立即关闭,然后重新读取配置文件之后重启。比如 service apache restart |
2 | SIGINT | 程序终止信号,用于终止前台进程。相当于输出 ctrl+c 快捷键 |
8 | SIGFPE | 在发生致命的算数运算错误时发出,不仅包括浮点数运算错误,还包括溢出及除数为 0 等其他所有的算术的错误 |
9 | SIGKILL | 用来立即结束程序的运行,本信号不能被阻塞、处理和忽略。一般用于强制终止进程 |
14 | SIGALRM | 始终定时信号,计算的是实际的时间或时钟时间,alarm 函数使用该信号 |
15 | SIGTERM | 正常结束进程的信号,kill 命令的默认信号。有时如果进程已经发生问题,这个信号是无法正常终止进程的,我们才会尝试 SIGKILL 信号,也就是信号 9 |
18 | SIGCONT | 该信号可以让暂停的进程恢复执行,本信号不能被阻断 |
19 | SIGSTOP | 该信号可以暂停前台进程,相当于输入 ctrl+z 快捷键。本信号不能被阻断。 |
[root@core-pods-3 ~]# kill -1 22354 # 重启该进程 | |
[root@core-pods-3 ~]# kill -9 22354 # 杀死该进程 | |
[root@core-pods-3 ~]# pstree -p | grep httpd | |
|-httpd(26013)-+-httpd(26014) | |
| |-httpd(26015) | |
| |-httpd(26016) | |
| |-httpd(26017) | |
| `-httpd(26018) | |
[root@core-pods-3 ~]# kill 26014 | |
[root@core-pods-3 ~]# pstree -p | grep httpd | |
|-httpd(26013)-+-httpd(2674) | |
| |-httpd(26015) | |
| |-httpd(26016) | |
| |-httpd(26017) | |
| `-httpd(26018) | |
[root@core-pods-3 ~]# kill -1 26013 | |
[root@core-pods-3 ~]# pstree -p | grep httpd | |
|-httpd(26013)-+-httpd(2706) | |
| |-httpd(2707) | |
| |-httpd(2708) | |
| |-httpd(2709) | |
| `-httpd(2710) |
# killall 命令
killall 命令是按照进程名杀死进程,命令是 killall [选项][信号] 进程名
,选项有:
- -i:交互式,询问是否要杀死某个进程
- -I:忽略进程名的大小写
[root@core-pods-3 ~]# killall -9 httpd |
# pkill 命令
和 killall 其实一样,命令是 pkill [选项][信号] 进程名
,选项:
- -t 终端号:按照终端号踢出用户
[root@core-pods-3 ~]# pkill -9 httpd | |
# 踢出用户 | |
[root@core-pods-3 ~]# ps aux | grep pts | |
root 3020 0.0 0.3 155464 4020 pts/1 R+ 07:56 0:00 ps aux | |
root 3021 0.0 0.2 112824 2360 pts/1 S+ 07:56 0:00 grep --color=auto pts | |
root 19051 0.0 0.9 159756 9904 ? Ss 02:28 0:00 sshd: root@pts/1 | |
root 27839 0.0 0.3 115692 3564 pts/1 Ss 05:19 0:00 -bash | |
[root@core-pods-3 ~]# w | |
07:56:10 up 45 days, 2:33, 1 user, load average: 0.00, 0.00, 0.00 | |
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT | |
root pts/1 64.104.44.97 05:19 1.00s 0.11s 0.11s -bash | |
[root@core-pods-3 ~]# pkill -9 -t pts/1 |
# 工作管理
# 把进程放入后台
有两种方法,第一种是直接放到后台执行的,在命令结尾加上 &
符号;第二种是后台暂停的,直接按 ctrl+z 放入后台队列。
[root@core-pods-3 ~]# tar -zcf etc.tar.gz/etc/ & # 后台压缩 etc 下所有文件,注意 “&” | |
[root@core-pods-3 ~]# top # 在 top 执行过程中,按下 ctrl+z 快捷键(注意:ctrl+c 是终止,他俩有区别) | |
[root@core-pods-3 ~]# jobs -l # 显示后台工作。-l 显示工作的 pid, 也可以直接 jobs,+ 号代表最近一个放入后台的工作,也是工作恢复时,默认恢复的工作,- 号代表倒数第二个放入后台的工作 | |
[1] Stopped top | |
[2]- Stopped top | |
[3]+ Stopped top | |
[root@core-pods-3 ~]# fg %3 # 将后台暂停的工作恢复到前台执行,“% 工作号”, % 可以省略,注意工作号不是 pid | |
[root@core-pods-3 ~]# fg 1 | |
[root@core-pods-3 ~]# jobs | |
[1]+ Stopped top | |
[root@core-pods-3 ~]# tar -zcf root.tar.gz/ # 此处点击 ctrl+z 放入后台 | |
[root@core-pods-3 ~]# jobs | |
[1]- Stopped top | |
[2]+ Stopped tar -zcf root.tar.gz / | |
[root@core-pods-3 ~]# bg 2 # 恢复执行第 2 条指令 | |
[root@core-pods-3 ~]# jobs | |
[1]+ Stopped top | |
[2]- Running tar -zcf root.tar.gz / & | |
# 注意后台恢复执行的命令是不能和前台有交互的,否则不能恢复到后台执行,如 vim | |
[root@core-pods-3 ~]# vim aa | |
[3]+ Stopped vim aa | |
[root@core-pods-3 ~]# jobs | |
[1]- Stopped top | |
[2] Running tar -zcf root.tar.gz / & | |
[3]+ Stopped vim aa | |
[root@core-pods-3 ~]# | |
[root@core-pods-3 ~]# ls | |
abc bak cde cde~ cdz~ etc.tar.gz ls.log test test2 | |
[root@core-pods-3 ~]# bg 3 | |
[3]+ vim aa & |
# 系统资源查看
比如查看 linux 内核版本,操作系统信息等等
vmstat 命令监控系统资源:vmstat [刷新延时 刷新次数]
[root@core-pods-3 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 7100 65412 69184 677080 0 0 0 1 4 2 0 0 100 0 0
[root@core-pods-3 ~]# vmstat 1 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 7100 64520 69196 677796 0 0 0 1 4 2 0 0 100 0 0
2 0 7100 64552 69196 677780 0 0 0 0 3793 5471 46 6 47 0 0
1 0 7100 64084 69196 677960 0 0 0 0 3992 5780 48 7 45 0 0
dmesg 开机时内核检测信息
[root@core-pods-3 ~]# dmesg
[root@core-pods-3 ~]# dmesg | grep CPU
[ 0.000000] x86/PAT: PAT not supported by CPU.
[ 0.000000] smpboot: Allowing 2 CPUs, 0 hotplug CPUs
[ 0.000000] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:2 nr_cpu_ids:2 nr_node_ids:1
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1
[ 0.000000] RCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=2.
[ 0.000000] Offload RCU callbacks from all CPUs
[ 0.000000] Offload RCU callbacks from CPUs: 0-1.
[ 0.065960] CPU: Physical Processor ID: 0
[ 0.065969] CPU: Processor Core ID: 0
[ 0.066043] mce: CPU supports 10 MCE banks
[ 0.209729] smpboot: CPU0: Intel QEMU Virtual CPU version (cpu64-rhel6) (family: 0x6, model: 0xd, stepping: 0x3)
[ 0.222392] smp: Bringing up secondary CPUs ...
[ 0.222979] .... node #0, CPUs: #1
[ 0.225712] smp: Brought up 1 node, 2 CPUs
[ 1.256306] ledtrig-cpu: registered to indicate activity on CPUs
free 命令查看内存使用状态
free [-b|-k|-m|-g] 分别以字节 / KB/MB/GB 为单位查看内存使用信息
[root@core-pods-3 ~]# free | |
total used free shared buff/cache available | |
Mem: 1031912 220924 75444 25600 735544 601308 | |
Swap: 533500 7100 526400 | |
[root@core-pods-3 ~]# free -g | |
total used free shared buff/cache available | |
Mem: 0 0 0 0 0 0 | |
Swap: 0 0 0 | |
[root@core-pods-3 ~]# free -m | |
total used free shared buff/cache available | |
Mem: 1007 215 72 25 719 587 | |
Swap: 520 6 514 | |
[root@core-pods-3 ~]# |
缓冲和缓存的区别:简单来说缓存(cache)是用来加速数据从硬盘中 “读取” 的,而缓冲(buffer)是用来加速数据 “写入” 硬盘的。
查看 cpu 信息:/proc/cpuinfo
[root@core-pods-3 ~]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 13
model name : QEMU Virtual CPU version (cpu64-rhel6)
stepping : 3
microcode : 0x1
cpu MHz : 2599.998
cache size : 16384 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm rep_good nopl xtopology pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm fsgsbase smep xsaveopt
bugs :
bogomips : 5199.99
clflush size : 64
cache_alignment : 64
address sizes : 46 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 13
model name : QEMU Virtual CPU version (cpu64-rhel6)
stepping : 3
microcode : 0x1
cpu MHz : 2599.998
cache size : 16384 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm rep_good nopl xtopology pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm fsgsbase smep xsaveopt
bugs :
bogomips : 5199.99
clflush size : 64
cache_alignment : 64
address sizes : 46 bits physical, 48 bits virtual
power management:
uptime 命令
显示启动时间和平均负载。其实就是 top 命令的第一行。
[root@core-pods-3 ~]# uptime
08:40:55 up 45 days, 3:18, 1 user, load average: 1.13, 1.09, 0.96
查看系统与内核相关信息
[root@core-pods-3 ~]# uname
Linux
[root@core-pods-3 ~]# uname -a # 查看系统所有相关信息
Linux core-pods-3.localdomain 4.10.4-1.el7.elrepo.x86_64 #1 SMP Sat Mar 18 12:50:10 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@core-pods-3 ~]# uname -r # 查看内核版本
4.10.4-1.el7.elrepo.x86_64
[root@core-pods-3 ~]# uname -s # 查看内核名称,default
Linux
判断当前系统的位数
[root@core-pods-3 ~]# file /bin/ls # 查看文件类型连带可以看到位数
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=c8ada1f7095f6b2bb7ddc848e088c2d615c3743e, stripped
查询当前 linux 系统的发行版本
[root@core-pods-3 ~]# cat /etc/redhat-release # centos 7
CentOS Linux release 7.9.2009 (Core)
[root@core-pods-3 ~]# lsb_release -a # centos 6
列出进程打开或使用的文件信息
lsof [选项]
- -c 字符串:只列出以字符串开头的进程打开的文件
- -u 用户名:只列出某个用户的进程打开的文件
- -p pid:列出某个 pid 进程打开的文件
[root@core-pods-3 ~]# lsof -p 2142
[root@core-pods-3 ~]# lsof -c init
# 系统定时任务
和 windows 的计划任务一个意思。linux 有些备份任务可以设置成定时任务。
crond 服务管理与访问控制
启动 crond 后台服务,cron 是定时的意思,d 是 daemon 后台的意思。
[root@core-pods-3 ~]# service crond restart
[root@core-pods-3 ~]# chkconfig crond on
[root@core-pods-3 ~]# systemctl enable crond
[root@core-pods-3 ~]# ps aux | grep crond
用户的 crontab 设置
命令是
crontab [选项]
,选项有:- -e:编辑 crontab 定时任务
- -l:查询 crontab 任务
- -r:删除当前用户所有的 crontab 任务
crontab -e
进入编辑界面,会打开 vim 编辑,输入格式为:* * * * * 执行的任务项目 含义 范围 第一个 * 号 一小时当中的第几分钟 0-59 第二个 * 号 一天当中的第几小时 0-23 第三个 * 号 一个月当中的第几天 1-31 第四个 * 号 一年当中的第几月 1-12 第五个 * 号 一周当中的星期几 0-7(0 和 7 都代表星期日) 举几个例子
时间 含义 45 22 * * * 命令
在 22 点 45 分执行命令 0 17 * * 1 命令
在每周 1 的 17 点 0 分执行命令 0 5 1,15 * * 命令
每月 1 号和 15 号的凌晨 5 点 0 分执行命令 40 4 * * 1-5 命令
每周一到周五的凌晨 4 点 40 分执行命令 */10 4 * * * 命令
每天的凌晨 4 点,每个 10 分钟执行一次命令 0 0 1,15 * 1 命令
每月 1 号和 15 号,每周一的 0 点 0 分都会执行命令。注意:星期几和几号最好不要同时出现,因为他们定义的都是天,非常容易让管理员混乱。 特殊符号含义
特殊符号 含义 *
代表任何时间。比如第一个 “*”
就代表一小时中每分钟都执行一次的意思, 代表不连续的时间。比如 “0 8,12,16 * * * 命令”
,就代表在每天的 8 点 0 分,12 点 0 分,16 点 0 分都执行一次命令- 代表连续的时间范围。比如 “0 5 * * 1-6 命令”
,代表在周一到周六的凌晨 5 点 0 分执行命令。*/n
代表每个多久执行一次。比如 “*/10 * * * * 命令”
,代表每隔 10 分钟就执行一遍名利那个举几个实际的 job 例子
*/5 * * * * /bin/echo "11" >> /tmp/test # 每 5 分钟将 11 以追加方式写入 test 文件
5 5 * * 2 /sbin/shutdown -r now # 每周二重启一次
0 5 1,10,15 * * /root/sh/autobak.sh # 每月 1,10,15 号执行这个脚本进行备份
[root@core-pods-3 ~]# crontab -l
23 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
* * * * * /bin/echo "11" >> /tmp/test
[root@core-pods-3 ~]# tail -f /tmp/test
11
11
注意定时任务里准备用日期作为文件名时,要加
\
转义,如date=$(date +\%y\%m\%d)
,当然这里可能和系统版本的不同有关,这里是 centos6。