ZBLOG

无法用 & 在后台执行一个脚本吗?

在 Linux/Unix 系统中,& 确实可以用于后台执行脚本,但可能会遇到以下问题或注意事项:


1. 基本用法(正确示例)

  1. ./your_script.sh & # 将脚本放到后台执行
  • 效果:脚本会在后台运行,终端可继续输入命令。
  • 输出:脚本的 stdout/stderr 仍会打印到当前终端(若终端关闭,可能导致脚本被终止)。

2. 常见问题及解决方案

问题1:终端退出后脚本被终止

  • 原因:默认情况下,后台进程属于当前会话(session),终端关闭时会被 SIGHUP 信号终止。
  • 解决: “`bash nohup ./your_script.sh & # 忽略 SIGHUP 信号,输出重定向到 nohup.out 或 disown -h %1 # 将作业从会话中剥离(需先通过 jobs 查看作业号) 或 setsid ./your_script.sh & # 直接让脚本运行在新会话中 或
  1. #### **问题2:需要完全脱离终端**
  2. 如果希望脚本完全脱离终端(包括输入输出):
  3. ```bash
  4. nohup ./your_script.sh > /dev/null 2>&1 &
  • > /dev/null:丢弃标准输出。
  • 2>&1:将错误输出重定向到标准输出(同样丢弃)。

3. 更健壮的后台执行方式

推荐使用工具管理后台任务:

  1. # systemd (Linux)
  2. sudo vim /etc/systemd/system/your_service.service
  3. # 内容示例:
  4. [Unit]
  5. Description=Your Script
  6. [Service]
  7. ExecStart=/path/to/your_script.sh
  8. Restart=always
  9. [Install]
  10. WantedBy=multi-user.target
  11. # Then:
  12. sudo systemctl start your_service
  13. sudo systemctl enable your_service
  14. # tmux/screen (会话管理)
  15. tmux new -s mysession
  16. ./your_script.sh
  17. Ctrl+B D (分离会话)

4. Shell语法注意事项

  • & 必须放在命令末尾: “`bash 错误写法: & ./your_script.sh # Syntax error 正确写法: ./your_script.sh &


    内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23336

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?