Linux运维——系统管理
Linux系统管理
- 一、Linux系统管理要点
- 二、命令常见用法
- 2.1、lsb_release
- 2.2、reboot
- 2.3、exit
- 2.4、shutdown
- 2.5、date
- 2.6、mount
- 2.8、ps
- 2.9、kill
- 2.10、systemctl
- 2.11、service
- 2.12、crontab
一、Linux系统管理要点
- 查看 Linux 系统发行版本
- 使用
lsb_release
(此命令适用于所有的 Linux 发行版本) - 使用
cat /etc/redhat-release
(此方法只适合 Redhat 系的 Linux)
- 使用
- 查看 CPU 信息 - 使用
cat /proc/cpuinfo
- 重新启动 Linux 操作系统 - 使用
reboot
- 退出 shell,并返回给定值 - 使用
exit
- 关闭系统 - 使用
shutdown
- 查看或设置系统时间与日期 - 使用
date
- 挂载文件系统 - 使用
mount
- 取消挂载文件系统 - 使用
umount
- 查看系统当前进程状态 - 使用
ps
- 删除当前正在运行的进程 - 使用
kill
- 启动、停止、重启、关闭、显示系统服务(Centos7),使用
systemctl
- 启动、停止、重启、关闭、显示系统服务(Centos7 以前),使用
service
- 管理需要周期性执行的任务,使用
crontab
二、命令常见用法
2.1、lsb_release
lsb_release 不是 bash 默认命令,如果要使用,需要先安装。
安装方法:
- 执行
yum provides lsb_release
,查看支持 lsb_release 命令的包。 - 选择合适版本,执行类似这样的安装命令:
yum install -y redhat-lsb-core-4.1-27.el7.centos.1.x86_64
2.2、reboot
reboot 命令用来重新启动正在运行的 Linux 操作系统。
reboot [选项]
常用选项:
-f
:强制重启,不调用 shutdown 或 init 进程。-n
:重启前不执行同步操作(不推荐,可能导致数据丢失)。-w
:模拟重启,只写入重启记录到/var/log/wtmp
,而不实际重启系统。-d
:不写入重启记录到/var/log/wtmp
。-i
:重启前关闭所有网络接口。
使用示例:
正常重启系统
sudo reboot
强制重启系统
sudo reboot -f
模拟重启(不实际重启)
sudo reboot -w
重启前关闭网络接口
sudo reboot -i
重启前不执行同步操作(不推荐)
sudo reboot -n
注意事项:
- 权限要求:重启系统需要 root 权限,通常使用 sudo。
- 数据安全:强制重启(-f)或跳过同步操作(-n)可能导致数据丢失,请谨慎使用。
- 日志记录:默认情况下,重启操作会记录到 /var/log/wtmp 中。
- 替代命令:也可以使用 shutdown -r now 或 init 6 来重启系统。
相关命令:
关机
sudo shutdown -h now
定时重启
sudo shutdown -r +10
# 10 分钟后重启。
取消计划的重启或关机
sudo shutdown -c
2.3、exit
exit 命令同于退出 shell,并返回给定值。在 shell 脚本中可以终止当前脚本执行。执行 exit 可使 shell 以指定的状态值退出。若不设置状态值参数,则 shell 以预设值退出。状态值 0 代表执行成功,其他值代表执行失败。
exit [状态码]
# 状态码:可选参数,用于指定退出状态。默认值为 0,表示成功。非零值通常表示错误或异常退出。
使用示例:
退出当前 shell 会话
exit
# 如果当前 shell 是登录 shell,退出后会返回到登录界面或关闭终端。
退出脚本并返回状态码
# 在脚本中使用 exit 可以终止脚本执行并返回指定的状态码。例如:
#!/bin/bash
if [ ! -f /path/to/file ]; then
echo "文件不存在"
exit 1
fi
echo "文件存在"
exit 0
退出子 shell
# 如果在子 shell 中执行 exit,只会退出当前子 shell,不会影响父 shell。例如:
(echo "进入子 shell"; exit; echo "这行不会执行")
echo "回到父 shell"
退出远程会话
# 在 SSH 远程登录时,输入 exit 可以断开连接并关闭会话:
exit
退出函数
# 在函数中使用 exit 会终止整个脚本,而不仅仅是函数。如果只想退出函数,可以使用 return。例如:
my_function() {
echo "函数开始"
if [ "$1" = "error" ]; then
return 1
fi
echo "函数结束"
}
my_function "error"
echo "脚本继续执行"
状态码:
0
:表示成功。1-255
:表示错误或异常退出。- 1:通用错误
- 2:命令用法错误
- 126:命令不可执行
- 127:命令未找到
- 128+N:脚本被信号 N 终止(例如,exit 130 表示被 Ctrl+C 终止)
注意事项:
- 退出当前会话:
- 在终端中执行 exit 会关闭当前 shell 会话。
- 如果当前 shell 是唯一的登录 shell,退出后会关闭终端。
- 脚本中的 exit:
- 在脚本中使用 exit 会终止整个脚本的执行。
- 如果只想退出函数或循环,可以使用 return 或 break。
- 状态码的意义:
- 状态码是脚本或命令执行结果的反馈,通常用于调试或自动化任务。
2.4、shutdown
shutdown 命令用来系统关机命令。shutdown 指令可以关闭所有程序,并依用户的需要,进行重新开机或关机的动作。
shutdown [选项] [时间] [消息]
- 时间:指定关机或重启的时间,可以是具体时间(如 22:00)或相对时间(如 +10 表示 10 分钟后)。
- 消息:可选参数,向所有登录用户广播的消息。
常用选项:
-h
:关机(halt)。-r
:重启(reboot)。-c
:取消计划的关机或重启。-k
:仅发送警告消息,不实际关机或重启。-P
:关机并关闭电源(默认行为)。-H
:关机但不关闭电源(系统进入 halt 状态)。-f
:强制关机或重启,不调用 init 进程。-t
:指定延迟时间(秒),默认为 60 秒。
使用示例:
立即关机
sudo shutdown -h now
10 分钟后关机
sudo shutdown -h +10
指定时间关机
sudo shutdown -h 22:00
立即重启
sudo shutdown -r now
5 分钟后重启,并发送消息
sudo shutdown -r +5 "系统将在 5 分钟后重启,请保存工作!"
取消计划的关机或重启
sudo shutdown -c
发送警告消息但不关机
sudo shutdown -k +5 "系统即将关闭,请保存工作!"
关机并关闭电源
sudo shutdown -P now
关机但不关闭电源
sudo shutdown -H now
强制关机
sudo shutdown -f -h now
注意事项:
- 权限要求:
- 执行 shutdown 需要 root 权限,通常使用 sudo。
- 广播消息:
- 使用 shutdown 时,可以广播消息给所有登录用户,提醒他们保存工作。
- 取消操作:
- 如果计划了关机或重启,可以使用 shutdown -c 取消。
- 延迟时间:
- 默认情况下,shutdown 会在执行前等待 60 秒。可以使用 -t 选项调整延迟时间。
- 替代命令:
- 关机:halt、poweroff
- 重启:reboot、init 6
相关命令:
查看计划中的关机或重启
cat /run/systemd/shutdown/scheduled
立即关机
sudo poweroff
立即重启
sudo reboot
2.5、date
date 命令是显示或设置系统时间与日期。
date [选项] [+格式]
# 如果不指定选项或格式,默认显示当前日期和时间。
# 使用 + 开头的格式字符串可以自定义输出格式。
常用选项:
-d
或--date
:显示指定日期或时间的字符串(支持相对时间)。-s
或--set
:设置系统日期和时间。-u
:显示或设置 UTC 时间(协调世界时)。-r
:显示指定文件的最后修改时间。-I
:以 ISO 8601 格式显示日期和时间。
使用示例:
显示当前日期和时间
date
# 输出示例:
Mon Oct 30 14:45:22 UTC 2023
自定义输出格式
date "+%Y-%m-%d %H:%M:%S"
# 输出示例:
2023-10-30 14:45:22
显示 UTC 时间
date -u
# 输出示例:
Mon Oct 30 14:45:22 UTC 2023
显示指定日期或时间
date -d "2023-10-30"
# 输出示例:
Mon Oct 30 00:00:00 UTC 2023
显示相对时间
date -d "tomorrow"
date -d "yesterday"
date -d "next week"
date -d "2 days ago"
设置系统日期和时间
sudo date -s "2023-10-30 14:45:22"
显示文件的最后修改时间
date -r /path/to/file
以 ISO 8601 格式显示日期和时间
date -I
# 输出示例:
2023-10-30
常用格式符号:
符号 | 说明 | 示例 |
---|---|---|
%Y | 年份(4 位) | 2023 |
%y | 年份(2 位) | 23 |
%m | 月份(01-12) | 10 |
%d | 日期(01-31) | 30 |
%H | 小时(00-23) | 14 |
%M | 分钟(00-59) | 45 |
%S | 秒数(00-59) | 22 |
%A | 星期全称 | Monday |
%a | 星期缩写 | Mon |
%B | 月份全称 | October |
%b | 月份缩写 | Oct |
%T | 时间(HH:MM:SS ) | 14:45:22 |
%F | 日期(YYYY-MM-DD) | 2023-10-30 |
%Z | 时区 | UTC |
%s | 时间戳(从 1970-01-01 起) | 1698672322 |
# 格式化输出
date +"%Y-%m-%d"
2009-12-07
# 输出昨天日期
date -d "1 day ago" +"%Y-%m-%d"
2012-11-19
# 2 秒后输出
date -d "2 second" +"%Y-%m-%d %H:%M.%S"
2012-11-20 14:21.31
# 传说中的 1234567890 秒
date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S"
2009-02-13 23:02:30
# 普通转格式
date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"
2009/12/12 00:00.00
# apache 格式转换
date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S"
2009-12-05 00:00.37
# 格式转换后时间游走
date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S"
2007-12-05 00:00.37
# 加减操作
date +%Y%m%d # 显示前天年月日
date -d "+1 day" +%Y%m%d # 显示前一天的日期
date -d "-1 day" +%Y%m%d # 显示后一天的日期
date -d "-1 month" +%Y%m%d # 显示上一月的日期
date -d "+1 month" +%Y%m%d # 显示下一月的日期
date -d "-1 year" +%Y%m%d # 显示前一年的日期
date -d "+1 year" +%Y%m%d # 显示下一年的日期
# 设定时间
date -s # 设置当前时间,只有root权限才能设置,其他只能查看
date -s 20120523 # 设置成20120523,这样会把具体时间设置成空00:00:00
date -s 01:01:01 # 设置具体时间,不会对日期做更改
date -s "01:01:01 2012-05-23" # 这样可以设置全部时间
date -s "01:01:01 20120523" # 这样可以设置全部时间
date -s "2012-05-23 01:01:01" # 这样可以设置全部时间
date -s "20120523 01:01:01" # 这样可以设置全部时间
# 有时需要检查一组命令花费的时间
#!/bin/bash
start=$(date +%s)
nmap man.linuxde.net &> /dev/null
end=$(date +%s)
difference=$(( end - start ))
echo $difference seconds.
注意事项:
- 权限要求:
- 设置系统日期和时间需要 root 权限,通常使用 sudo。
- 时区设置:
- 使用 timedatectl 命令可以查看或修改系统时区:
timedatectl set-timezone Asia/Shanghai
- 时间同步:
- 使用 ntp 或 chrony 服务可以同步系统时间。
2.6、mount
mount 命令用于挂载文件系统到指定的挂载点。此命令的最常用于挂载 cdrom,使我们可以访问 cdrom 中的数据,因为你将光盘插入 cdrom 中,Linux 并不会自动挂载,必须使用 Linux mount 命令来手动完成挂载。
mount [选项] [设备] [挂载点]
# 设备:要挂载的设备(如 /dev/sda1)或远程文件系统(如 NFS)。
# 挂载点:文件系统挂载的目标目录。
常用选项:
-t
:指定文件系统类型(如 ext4、ntfs、nfs 等)。-o
:指定挂载选项(如 ro 只读、rw 读写、remount 重新挂载等)。-a
:挂载 /etc/fstab 中定义的所有文件系统。-l
:显示已挂载的文件系统及其标签。-v
:显示详细信息。-r
:以只读模式挂载。-w
:以读写模式挂载(默认)。
使用示例:
挂载设备到目录
sudo mount /dev/sdb1 /mnt/data
指定文件系统类型
sudo mount -t ext4 /dev/sdb1 /mnt/data
挂载为只读模式
sudo mount -o ro /dev/sdb1 /mnt/data
重新挂载为读写模式
sudo mount -o remount,rw /mnt/data
挂载 NFS 文件系统
sudo mount -t nfs 192.168.1.100:/shared /mnt/nfs
挂载 ISO 文件
sudo mount -o loop /path/to/image.iso /mnt/iso
挂载 /etc/fstab 中定义的所有文件系统
sudo mount -a
显示已挂载的文件系统
mount
# 或
mount -l
卸载文件系统
sudo umount /mnt/data
挂载选项(-o):
选项 | 说明 |
---|---|
ro | 只读模式 |
rw | 读写模式(默认) |
remount | 重新挂载文件系统 |
noexec | 禁止执行文件系统中的可执行文件 |
nosuid | 禁止设置 SUID 和 SGID 权限 |
nodev | 禁止使用设备文件 |
sync | 同步写入(性能较低,但数据更安全) |
async | 异步写入(默认,性能较高) |
defaults | 使用默认选项(rw, suid, dev, exec, auto, nouser, async) |
配置文件 /etc/fstab:
/etc/fstab 文件用于定义系统启动时自动挂载的文件系统。每行格式如下:
设备 挂载点 文件系统类型 挂载选项 备份标志 检查顺序
挂载本地分区
/dev/sdb1 /mnt/data ext4 defaults 0 2
挂载 NFS 文件系统
192.168.1.100:/shared /mnt/nfs nfs defaults 0 0
挂载交换分区
/dev/sdb2 none swap sw 0 0
注意事项:
- 权限要求:
- 挂载和卸载文件系统需要 root 权限,通常使用 sudo。
卸载文件系统:
- 挂载和卸载文件系统需要 root 权限,通常使用 sudo。
- 在卸载文件系统前,确保没有进程正在使用该文件系统,否则会报错。
- 使用 lsof 或 fuser 命令可以查看正在使用文件系统的进程:
lsof /mnt/data
fuser -v /mnt/data
- 文件系统类型:
- 如果不指定文件系统类型,mount 会尝试自动检测。
- 挂载点:
- 挂载点必须是一个已存在的目录。
相关命令:
查看磁盘分区
lsblk
查看文件系统类型
blkid
查看挂载信息
df -h
强制卸载文件系统
sudo umount -l /mnt/data
2.8、ps
ps 命令用于报告当前系统的进程状态。可以搭配 kill 指令随时中断、删除不必要的程序。ps 命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
ps [选项]
# 如果不指定选项,默认显示当前用户的进程
常用选项:
-e
:显示所有进程。-f
:显示完整格式的进程信息。-u
:显示指定用户的进程。-p
:显示指定 PID 的进程。-aux
:显示所有用户的进程(BSD 风格)。-ef
:显示所有进程的完整信息(标准风格)。--forest
:以树状结构显示进程。-o
:自定义输出格式。
使用示例:
显示当前用户的进程
ps
#输出示例:
PID TTY TIME CMD
1234 pts/0 00:00:00 bash
5678 pts/0 00:00:00 ps
显示所有进程
ps -e
显示完整格式的进程信息
ps -ef
# 输出示例:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 14:30 ? 00:00:01 /sbin/init
user 1234 1233 0 14:35 pts/0 00:00:00 bash
显示指定用户的进程
ps -u username
显示指定 PID 的进程
ps -p 1234
显示所有用户的进程(BSD 风格)
ps aux
# 输出示例:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 12345 6789 ? Ss 14:30 0:01 /sbin/init
user 1234 0.0 0.2 23456 7890 pts/0 S+ 14:35 0:00 bash
以树状结构显示进程
ps --forest
自定义输出格式
ps -eo pid,ppid,cmd
#输出示例:
PID PPID CMD
1 0 /sbin/init
1234 1233 bash
常用输出字段:
字段 | 说明 |
---|---|
PID | 进程 ID |
PPID | 父进程 ID |
UID | 用户 ID |
USER | 用户名 |
%CPU | CPU 使用率 |
%MEM | 内存使用率 |
VSZ | 虚拟内存大小(KB) |
RSS | 常驻内存大小(KB) |
TTY | 终端设备 |
STAT | 进程状态 |
START | 进程启动时间 |
TIME | 进程占用 CPU 时间 |
CMD | 启动进程的命令 |
进程状态(STAT):
状态 | 说明 |
---|---|
R | 运行中 |
S | 睡眠中(可中断) |
D | 不可中断的睡眠(通常为 I/O 操作) |
Z | 僵尸进程 |
T | 停止或被跟踪 |
< | 高优先级 |
N | 低优先级 |
s | 会话领导者 |
l | 多线程 |
+ | 前台进程组 |
相关命令:
- 实时监控进程
top
- 查找进程
pgrep nginx
杀死进程
pkill nginx
2.9、kill
kill 命令用来删除执行中的程序或工作。kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。程序或工作的编号可利用 ps 指令或 job 指令查看。
kill [选项] [信号] [PID]
# 信号:可以是信号编号或信号名称(如 9 或 SIGKILL)。
# PID:目标进程的进程 ID。
常用信号:
信号编号 | 信号名称 | 说明 |
---|---|---|
1 | SIGHUP | 挂起,通常用于重新加载配置 |
2 | SIGINT | 中断(等同于 Ctrl+C) |
9 | SIGKILL | 强制终止进程 |
15 | SIGTERM | 正常终止进程(默认信号) |
18 | SIGCONT | 恢复暂停的进程 |
19 | SIGSTOP | 暂停进程 |
使用示例:
终止进程(默认发送 SIGTERM)
kill 1234
强制终止进程(发送 SIGKILL)
kill -9 1234
# 或
kill -SIGKILL 1234
暂停进程(发送 SIGSTOP)
kill -19 1234
恢复暂停的进程(发送 SIGCONT)
kill -18 1234
重新加载进程配置(发送 SIGHUP)
kill -1 1234
终止所有同名进程
killall process_name
终止当前用户的指定进程
pkill process_name
# 列出所有信号名称
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
# 先用 ps 查找进程,然后用 kill 杀掉
ps -ef | grep vim
root 3268 2884 0 16:21 pts/1 00:00:00 vim install.log
root 3370 2822 0 16:21 pts/0 00:00:00 grep vim
kill 3268
kill 3268
-bash: kill: (3268) - 没有那个进程
注意事项:
- 权限要求:
- 普通用户只能终止自己拥有的进程。
- 终止其他用户的进程需要 root 权限,通常使用 sudo。
- 信号选择:
- 优先使用 SIGTERM(15),允许进程正常退出。
- 如果进程无法正常退出,再使用 SIGKILL(9)强制终止。
- 僵尸进程:
- SIGKILL 无法终止僵尸进程,需要终止其父进程。
- 批量终止进程:
- 使用 killall 或 pkill 可以批量终止同名进程。
相关命令:
查找进程
pgrep process_name
批量终止进程
pkill process_name
显示信号列表
kill -l
实时监控进程
top
2.10、systemctl
systemctl 命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。
systemctl [选项] [命令] [服务名]
系统管理:
重启系统
sudo systemctl reboot
关闭系统
sudo systemctl poweroff
挂起系统
sudo systemctl suspend
进入休眠状态
sudo systemctl hibernate
查看系统状态
systemctl status
查看所有已启动的服务
systemctl list-units --type=service
查看所有服务(包括未启动的)
systemctl list-units --type=service --all
查看失败的服务
systemctl --failed
常用选项:
--no-pager
:禁用分页显示。--type=
:指定单元类型(如 service、socket 等)。--state=
:指定单元状态(如 running、failed 等)。-H
:远程管理其他主机(需配置 SSH)。
使用示例:
# 1.启动 nfs 服务
systemctl start nfs-server.service
# 2.设置开机自启动
systemctl enable nfs-server.service
# 3.停止开机自启动
systemctl disable nfs-server.service
# 4.查看服务当前状态
systemctl status nfs-server.service
# 5.重新启动某服务
systemctl restart nfs-server.service
# 6.查看所有已启动的服务
systemctl list -units --type=service
# 7. 开启防火墙 22 端口
iptables -I INPUT -p tcp --dport 22 -j accept
# 8. 彻底关闭防火墙
sudo systemctl status firewalld.service
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
启动 Apache 服务
sudo systemctl start apache2
停止 Nginx 服务
sudo systemctl stop nginx
重启 MySQL 服务
sudo systemctl restart mysql
查看 SSH 服务状态
systemctl status sshd
启用 Docker 服务开机自启
sudo systemctl enable docker
禁用防火墙开机自启
sudo systemctl disable ufw
查看所有正在运行的服务
systemctl list-units --type=service --state=running
查看系统日志
journalctl -xe
注意事项:
- 权限要求:
- 启动、停止、重启服务等操作需要 root 权限,通常使用 sudo。
- 服务名称:
- 服务名称通常以 .service 结尾,但使用 systemctl 时可以省略。
- 日志查看:
- 使用 journalctl 可以查看服务的详细日志。例如:
journalctl -u service_name
- 服务依赖:
- 某些服务可能依赖其他服务,启动或停止时需注意依赖关系。
相关命令:
查看系统日志
journalctl
查看服务日志
journalctl -u service_name
查看系统启动时间
systemctl show -p KernelTimestamp
查看服务依赖关系
systemctl list-dependencies service_name
2.11、service
service 命令是 Redhat Linux 兼容的发行版中用来控制系统服务的实用工具,它以启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。
启动服务
sudo service <服务名> start
# 示例
sudo service apache2 start
停止服务
sudo service <服务名> stop
# 示例:
sudo service apache2 stop
.重启服务
sudo service <服务名> restart
# 示例:
sudo service apache2 restart
查看服务状态
sudo service <服务名> status
# 示例:
sudo service apache2 status
重新加载服务配置
sudo service <服务名> reload
# 示例:
sudo service apache2 reload
启用或禁用服务
service 命令不直接支持启用或禁用服务,通常使用 chkconfig 或 update-rc.d 来实现。
注意事项:
- 服务名:需替换为实际的服务名称,如 apache2、nginx 等。
- 权限:通常需要 sudo 权限。
- 系统兼容性:service 命令适用于 System V init 系统,在 systemd 系统中建议使用 systemctl。
示例:
启动 Apache 服务:
sudo service apache2 start
查看 Apache 状态:
sudo service apache2 status
重启 Apache:
sudo service apache2 restart
2.12、crontab
crontab 命令被用来提交和管理用户的需要周期性执行的任务,与 windows 下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动 crond 进程,crond 进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
基本用法:
编辑当前用户的 cron 任务
crontab -e
# 这会打开默认文本编辑器(如 vi 或 nano),允许你添加或修改 cron 任务。
# 保存并退出后,任务会自动生效。
查看当前用户的 cron 任务
crontab -l
# 列出当前用户的所有 cron 任务。
删除当前用户的所有 cron 任务
crontab -r
#这会删除当前用户的所有 cron 任务,谨慎使用!
为其他用户管理 cron 任务(需要 root 权限)
sudo crontab -u <用户名> -e # 编辑其他用户的 cron 任务
sudo crontab -u <用户名> -l # 查看其他用户的 cron 任务
sudo crontab -u <用户名> -r # 删除其他用户的 cron 任务
Cron任务格式:
每个 cron 任务由 6 个字段组成,格式如下:
* * * * * <要执行的命令>
字段 | 含义 | 取值范围 |
---|---|---|
第1个字段 | 分钟 | 0-59 |
第2个字段 | 小时 | 0-23 |
第3个字段 | 日期 | 1-31 |
第4个字段 | 月份 | 1-12 |
第5个字段 | 星期几 | 0-7(0 和 7 都表示周日) |
第6个字段 | 要执行的命令 | 可以是任何命令或脚本 |
特殊符号:
*
:表示所有可能的值。- 例如,* * * * * 表示每分钟执行一次。
,
:用于分隔多个值。- 例如,0,15,30,45 * * * * 表示每小时的 0、15、30、45 分钟执行。
-
:表示范围。- 例如,0 9-17 * * * 表示每天 9 点到 17 点之间,每小时的第 0 分钟执行。
/
:表示间隔。- 例如,*/5 * * * * 表示每 5 分钟执行一次。
使用示例:*
每天凌晨 2 点执行脚本
0 2 * * * /path/to/script.sh
每 5 分钟执行一次命令
*/5 * * * * /path/to/command
每周一的上午 8 点执行任务
0 8 * * 1 /path/to/task
每月 1 号的凌晨 0 点执行备份
0 0 1 * * /path/to/backup.sh
每小时的第 30 分钟执行任务
30 * * * * /path/to/task
# 每 1 分钟执行一次 command
* * * * * command
# 每小时的第 3 和第 15 分钟执行
3,15 * * * * command
# 在上午 8 点到 11 点的第 3 和第 15 分钟执行
3,15 8-11 * * * command
# 每隔两天的上午 8 点到 11 点的第 3 和第 15 分钟执行
3,15 8-11 */2 * * command
# 每个星期一的上午 8 点到 11 点的第 3 和第 15 分钟执行
3,15 8-11 * * 1 command
# 每晚的 21:30 重启 smb
30 21 * * * /etc/init.d/smb restart
# 每月 1、10、22 日的 4 : 45 重启 smb
45 4 1,10,22 * * /etc/init.d/smb restart
# 每周六、周日的 1:10 重启 smb
10 1 * * 6,0 /etc/init.d/smb restart
# 每天 18 : 00 至 23 : 00 之间每隔 30 分钟重启 smb
0,30 18-23 * * * /etc/init.d/smb restart
# 每星期六的晚上 11:00 pm 重启 smb
0 23 * * 6 /etc/init.d/smb restart
# 每一小时重启 smb
* */1 * * * /etc/init.d/smb restart
# 晚上 11 点到早上 7 点之间,每隔一小时重启 smb
* 23-7/1 * * * /etc/init.d/smb restart
# 每月的 4 号与每周一到周三的 11 点重启 smb
0 11 4 * mon-wed /etc/init.d/smb restart
# 一月一号的 4 点重启 smb
0 4 1 jan * /etc/init.d/smb restart
# 每小时执行`/etc/cron.hourly`目录内的脚本
01 * * * * root run-parts /etc/cron.hourly
注意事项:
- 环境变量:cron 任务的环境变量可能与用户登录时的环境不同,建议在脚本中显式设置环境变量。
- 路径问题:cron 任务的命令尽量使用绝对路径,避免因路径问题导致任务失败。
- 日志记录:可以通过重定向输出记录日志,例如:
* * * * * /path/to/script.sh >> /path/to/logfile.log 2>&1
- 权限问题:确保脚本具有可执行权限(chmod +x script.sh)。