查看日志
1
2
3
4
5
6
7
# tail 从末尾开始计算
# -n 100 设置条数 100
# -f 动态监控
# log.txt 指定日志
# | 管道运算符
# grep 根据条件筛选
tail -n 100 -f log.txt | grep 'error'
挂起服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# nohup ... & disown:让它在后台一直跑,关闭终端也不会结束,直到你手动停止(或系统重启)。
# bash -c '' 执行指令
# > /dev/null丢弃标准输出(stdout); 如果使用 >> 则是追加( > 覆盖); 有需要也可以替换为日志路径
# 2>&1 把标准错误(stderr)也重定向到标准输出 → 最终全部丢弃到 /dev/null
# & 把整个 nohup 命令放到后台运行。
# disown 把这个后台进程从当前 shell 的 job 列表中移除。
nohup bash -c 'cd /home/linuxuser/wkai.de && jekyll s -s ./ -d ./_site --trace' > /dev/null 2>&1 & disown
# 查看运行指令
ps -ef | grep nohup
ps -p 12345 -o pid,cmd
# 退出
exit
| 挂起方式 | 适用场景 | 优点 | 缺点 | 是否适合长期运行 | 是否自动重启 | 是否推荐 |
|---|---|---|---|---|---|---|
| nohup + & | 短期后台任务(下载、执行脚本等) | 简单、快速、不需要配置 | 无自动拉起;session 退出可能仍被 systemd 回收;日志不易管理;OOM 风险 | ❌ 不适合 | ❌ 否 | ❌ 不推荐长期挂服务 |
| tmux / screen | 手工运行任务并保持会话 | 不依赖 ssh;会话可重新连接;稳定 | 不会自动重启;需要手动管理;不是 daemon | ⚠️ 部分适合 | ❌ 否 | ✔ 适合调试,非长期 |
| systemd service(推荐) | 正式服务、长期运行、生产环境 | 自动拉起、稳定、可限制资源、日志管理完善、开机自启、免 ssh | 需要写 unit file(一次配置后最稳) | ✔ 非常适合 | ✔ 是 | ⭐ 强烈推荐 |
| cron 定时任务 | 定期执行任务(构建 / 检查 / 同步) | 简单、轻量,不常驻内存;任务时间可控 | 不能实时运行,不适合“服务”;不能长期保持前台程序 | ❌ 不适合长期驻留 | ❌ 否 | ✔ 适合周期任务 |
| inotifywait(文件变化触发) | 文档变更触发构建(你用 Jekyll 很适合) | 实时触发、轻量、低资源占用 | 需常驻进程,有时会漏事件(NFS 等) | ✔ 适合 | ❌ 否 | ✔ 适合自动构建但需 systemd 管理 |
| supervisord | 中小型服务管理(Python/Node 等) | 自动拉起、配置简单 | 不如 systemd 稳定;不推荐新系统使用 | ✔ 适合 | ✔ 是 | ⚠️ systemd 时代不推荐 |
| Docker 容器 + restart=always | 容器化服务 | 隔离、安全、自动重启、跨平台 | 配置复杂、占用资源、对小内存不友好 | ✔ 适合 | ✔ 是 | 视场景而定 |
定时任务
1
2
3
4
5
6
7
8
9
# crontab -e 编辑当前用户的 crontab 定时任务列表。保存退出后,系统就会按照你写入的内容定时执行任务。
# */1 * * * * 每一分钟执行一次 [分 时 日 月 周]
# git ... pull 自动拉取 git 代码
# > /dev/null 输出重定向 (丢弃), 有需要也可以替换为日志路径。
crontab -e
*/1 * * * * git --git-dir=/home/linuxuser/wkai.de/_posts/.git --work-tree=/home/linuxuser/wkai.de/_posts pull > /dev/null
# 查看执行情况
crontab -l
查看服务器内存情况
在排查 OOM 问题时常用。
1
2
3
4
5
6
7
8
9
10
## 指令
free -h
# 示例结果
# Mem: 物理内存(RAM)
# Swap: 交换分区(虚拟内存)
# 每类下面都有 total / used / free / shared / buff/cache / available
total used free shared buff/cache available
Mem: 759Mi 316Mi 175Mi 17Mi 411Mi 443Mi
Swap: 2.3Gi 208Mi 2.1Gi
查看日志
写入日志
1
2
# 将日志写入目标文件
git pull >> error.log 2>&1
tail指令
1
2
3
# 动态查看尾部日志
# -n 查看行数 | -f 实时日志 | -c 按字节查看 | -q 安静模式(不打印文件名) | -v 强制显示文件名 | --pid=PID -f 跟随到某进程结束 |
tail -n 50 -f error.log
tail + grep 常用组合(超级实用)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 一边输出新日志,一边过滤
tail -f build.log | grep "ERROR"
# 实时追踪并过滤多个字段
tail -f logfile | grep -E "ERROR|WARN|FATAL"
# 反向过滤,排除某些条件
tail -f logfile | grep -v "DEBUG"
# 关键信息高亮
tail -f logfile | grep --color=always "keyword"
# 忽略大小写
tail -f logfile | grep -i "error"