Fork me on GitHub

Linux运行命令三种方式对比

三种方式

  1. 临时测试 → nohup
  2. 稳定运行 → supervisor
  3. 系统级守护 → systemd

测试用例/data/test.sh

#!/bin/bash
# /data/test.sh - Linux 简单输出时间的 demo 脚本

while true
do
    echo "$(date '+%Y-%m-%d %H:%M:%S') - 测试脚本运行中..."
    sleep 1
done

nohub

#执行权限
chmod +x /data/test.sh
#后台运行
nohup /data/test.sh > /data/test.log 2>&1 &
#查看日志
tail -f /data/test.log

image

supervisor

Supervisor 是一个 用 Python 写的守护进程管理工具,主要功能是:

• 启动、停止、重启进程
• 保证进程崩溃后自动重启
• 集中管理日志
• 提供命令行或网页界面监控进程状态

简单理解:它就是一个 “程序保姆/管家”,专门看着你写的程序,一旦程序挂了,它就把程序重新叫起来。

安装supervisor

sudo apt install supervisor      # Debian/Ubuntu
sudo yum install supervisor      # CentOS

配置

创建 /etc/supervisor/conf.d/test.conf

[program:test]
command=/bin/bash /data/test.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/test.err.log
stdout_logfile=/var/log/test.out.log

启动

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start test

系统级守护进程(systemd)

创建 systemd 服务文件

路径: /etc/systemd/system/test_demo.service

[Unit]
Description=Test Demo Script
After=network.target

[Service]
# 要执行的脚本路径
ExecStart=/data/test.sh

# 让 systemd 负责重启
Restart=always
RestartSec=3

# 运行用户(可改成你的业务账号)
User=root

# 输出日志位置
StandardOutput=append:/data/test.log
StandardError=append:/data/test_err.log

[Install]
WantedBy=multi-user.target

加载并启动服务

# 重新加载 systemd 配置
systemctl daemon-reload

# 启动服务
systemctl start test_demo

# 设置开机自启
systemctl enable test_demo

# 查看运行状态
systemctl status test_demo

image

posted @ 2025-10-27 21:26  秋夜雨巷  阅读(3)  评论(0)    收藏  举报