![Ubuntu Shell:使用 cron 连续运行 3 个脚本,第二个脚本必须保持在后台运行](https://linux22.com/image/1608635/Ubuntu%20Shell%EF%BC%9A%E4%BD%BF%E7%94%A8%20cron%20%E8%BF%9E%E7%BB%AD%E8%BF%90%E8%A1%8C%203%20%E4%B8%AA%E8%84%9A%E6%9C%AC%EF%BC%8C%E7%AC%AC%E4%BA%8C%E4%B8%AA%E8%84%9A%E6%9C%AC%E5%BF%85%E9%A1%BB%E4%BF%9D%E6%8C%81%E5%9C%A8%E5%90%8E%E5%8F%B0%E8%BF%90%E8%A1%8C.png)
我在最近管理的一台服务器中遇到了以下情况。它是一台用作音乐流媒体服务器的 Ubuntu,必须根据计划更改音乐,但上一位系统管理员使用 3 个脚本(00-stop.sh、10-server.sh 和 20-client.sh)手动完成了此操作。以下是他使用/向我解释的步骤:
- 运行00-stop.sh脚本,停止流媒体服务器。
- 更改20-client.sh脚本中的列表。
- 使用“&”运行 10-server.sh 以使其在后台运行。
- 使用更新的列表运行 20-client.sh,音乐将开始流式传输。
我想我可以使用 Cron 自动化来自动更改音乐,但我不确定如何操作。我的想法是使用四个脚本:00-stop.sh 10-server.sh 20-client.sh(带有音乐列表 1)30-client.sh(带有音乐列表 2)
并根据计划运行 20-client 或 30-client。每个 cron 作业应首先调用 00-stop.sh,然后调用 10-server.sh(并将其保持在后台),然后调用 20-client.sh 或 30-client.sh。
我想象这样的事情:
0 10 * * 1 /path/00-stop.sh && /path/10-server.sh && /path/20-client.sh
问题是我需要第二个脚本(10-server.sh)在后台继续运行,我该怎么做?
答案1
我整理了一个脚本:
#!/usr/bin/env bash
set -e # abort for any non-zero exit statuses
/path/00-stop.sh
/path/10-server.sh </dev/null >/dev/null 2>&1 &
disown
/path/20-client.sh
那么 cron 任务将是
0 10 * * 1 bash /path/refresh_music_server.sh