概念
以下概念以终端操作为前提
- 前台任务: 在前台执行的任务, 任务一旦执行则占用终端窗口, 同一窗口内 无法进行其他操作
- 后台任务: 在后台执行的任务, 任务执行不占用终端窗口, 同一窗口内 可一边执行任务 一边进行其他操作
无论是前台任务还是后台任务, 终端一旦被关闭, 任务会立即终止
前台任务
终止前台任务
1
Ctrl+C
暂停前台任务
1
Ctrl+Z
查看当前暂停的任务和所有后台任务信息
1
jobs -l
将前台任务切换成后台任务
1
2
31.输入ctrl + z 暂停任务
2.输入jobs查看任务号
3.使用 bg %任务号 将该任务号放入后台终端关闭 保持前台任务继续运行
1
nohup xxxx
nohup: 表示忽略
hup
信号, 终端关闭任务进程也不销毁
后台任务
以后台方式启动任务, 命令末尾加
&
即可1
watch -n 10 sh test.sh & #每10s在后台执行一次test.sh脚本
终止后台任务
方式一:
1
21.输入jobs查看任务号
2.kill %任务编号方式二:
1
21.使用ps指令查看任务进程pid
2.kill pid将后台任务切换成前台任务
1
21.输入jobs查看任务号
2.fg %任务编号终端关闭 保持后台任务继续运行
如果后台任务还未启动, 指令前面加
nohup
:1
nohup watch -n 10 sh test.sh &
如果后台任务已经启动:
1
21.输入jobs查看任务号
2.使用 disown -h %任务号disown
指令用于对jobs
任务的移除移出操作, 常见参数有:1
2
3disown -a //删除全部作业
disown -r //删除正在运行的作业
disown -h %任务号 //移出(非删除)指定作业, 同时忽略hup信号
实现后台任务的另一种方式
除了使用nuhup
+&
的方式使得任务在后台运行且不受终端关闭影响外, 还有一种方式那就是使用systemd
创建systemd
服务步骤如下:
创建服务配置文件
1
vim xxx.service
将以下内容填入配置文件中:
1
2
3
4
5
6
7
8
9[Unit]
Description=Foo
[Service]
ExecStart=/usr/sbin/foo-daemon
Restart=always
[Install]
WantedBy=multi-user.target- Description: 表示服务描述
- ExecStart: 表示需要执行的程序指令, 需要填入程序的完整路径
- Restart: 表示是否自动重启, 可选参数有
no
、always
、on-success
、on-failure
、on-abnormal
、on-abort
、on-watchdog
等 - WantedBy: 表示用户权限
将服务配置文件拷贝至
/lib/systemd/system/
目录下1
sudo cp xxx.service /lib/systemd/system/
启动服务
1
sudo systemctl start xxx
关于服务的其他操作指令
停止服务
1
sudo systemctl stop xxx
查看服务运行状态
1
sudo systemctl status xxx
设置服务开机自启动
1
sudo systemctl enable xxx
禁止服务开启自启动
1
sudo systemctl disable xxx
服务重启
1
sudo systemctl restart xxx
查看
systemd
的版本1
sudo systemctl --version
查看配置文件
1
systemctl cat xxx.service
systemd
和nohup+&
之间的对比
systemd
可以满足以下需求:
- 方便分析问题的服务运行日志记录
- 服务管理的日志
- 异常退出时可以根据需要重新启动
而nohup
只能记录服务运行时的输出和出错日志, 根据我们实际的需求进行选择即可
本文为作者原创 转载时请注明出处 谢谢
微信公众号二维码如下: