当前位置: 首页 > article >正文

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

注意事项:

  1. 权限要求:
    • 执行 shutdown 需要 root 权限,通常使用 sudo。
  2. 广播消息:
    • 使用 shutdown 时,可以广播消息给所有登录用户,提醒他们保存工作。
  3. 取消操作:
    • 如果计划了关机或重启,可以使用 shutdown -c 取消。
  4. 延迟时间:
    • 默认情况下,shutdown 会在执行前等待 60 秒。可以使用 -t 选项调整延迟时间。
  5. 替代命令:
    • 关机: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.

注意事项:

  1. 权限要求:
    • 设置系统日期和时间需要 root 权限,通常使用 sudo。
  2. 时区设置:
    • 使用 timedatectl 命令可以查看或修改系统时区:
timedatectl set-timezone Asia/Shanghai
  1. 时间同步:
    • 使用 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。
      卸载文件系统:
  • 在卸载文件系统前,确保没有进程正在使用该文件系统,否则会报错。
    • 使用 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用户名
%CPUCPU 使用率
%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。

常用信号:

信号编号信号名称说明
1SIGHUP挂起,通常用于重新加载配置
2SIGINT中断(等同于 Ctrl+C)
9SIGKILL强制终止进程
15SIGTERM正常终止进程(默认信号)
18SIGCONT恢复暂停的进程
19SIGSTOP暂停进程

使用示例:

终止进程(默认发送 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)。

http://www.kler.cn/a/544446.html

相关文章:

  • 02.10 TCP之文件传输
  • ASP.NET Core 外部向SignalR的Hub发消息
  • ‌双非硕士的抉择:自学嵌入式硬件开发还是深入Linux C/C++走软开?
  • windows系统远程桌面连接ubuntu18.04
  • 开发一个类似小红书的社交电商平台需要综合技术、产品和运营能力
  • 办公用品管理系统需求说明
  • DeepSeek批量生成全平台推广营销内容:高效提升营销效率
  • 【信息系统项目管理师-案例真题】2019下半年案例分析答案和详解
  • 在 python 中使用 toml
  • NLP Word Embeddings
  • 第41天:Web开发-JS应用微信小程序源码架构编译预览逆向调试嵌套资产代码审计
  • Flink提交pyflink任务
  • 深度整理总结MySQL——redoLog日志工作原理
  • 从0到1构建 Kubernetes中间件运维平台:标准化、可视化与全栈运维的最佳实践|得物技术
  • frp内网穿透详细步骤(解决不同局域网注册的nacos服务不能通信的问题)
  • 数据集——个人收集的用于计算机视觉实例分割的数据集持续更新
  • JVM(Java 虚拟机)
  • Uniapp 获取定位详解:从申请Key到实现定位功能
  • 在 Vue 项目中使用 SQLite 数据库的基础应用
  • AI赋能前端协作:效率提升与团队新动力
  • 从零搭建:Canal实时数据管道打通MySQL与Elasticsearch
  • STM32 RTC 实时时钟说明
  • 点大商城V2-2.6.6源码全开源uniapp +搭建教程
  • 算法跟练第十一弹——二叉树
  • debian和ubuntu安装python3.8并修改默认python版本
  • 小鹏自动驾驶 xnet 技术细节