我读了 20 个关于 cron 作业的问题,以及你不需要设置什么,我做了所有这些,不要将其标记为重复。所以我的脚本是这样的:
#!/bin/bash
openRTSP_process_ids=(`/bin/ps -fu $USER | /bin/grep "openRTSP" | /bin/grep -v "grep" | /bin/grep -v $0 | /usr/bin/awk '{print $2}'`)
echo $openRTSP_process_ids
for i in "${openRTSP_process_ids[@]}"
do
if [ -n "$i" ]; then
echo $i
kill -1 $i
fi
done
我的 crontab 看起来像这样:
#SHELL=/bin/bash
PATH=/home/username/bin:/home/username/.local/bin:/opt/OpenPrinting-Gutenprint/sbin:/opt/OpenPrinting-Gutenprint/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap$
43,41,26,21,16,12,1,7,48,46,33,49,54,57,59,4,9,14,19,24,27,29,32,34,39,44 * * * * bash /home/username/Documents/stop_openRTSP &>> /home/username/stop.log
50,55,0,5,10,15,20,25,30,35,40,45 * * * * /home/username/Documents/start_openRTSP
我用标准 sh shell 尝试过,但 bash shell 都不起作用。我尝试使用 &>> bash 重定向和 2>&1 sh 重定向将输出重定向到日志文件机器人,但日志文件只是空的。我尝试了很多事情,但进程永远不会被终止,但当我通过命令行执行此操作时,它们就会被终止。
除了添加路径和 shell 之外,我还用完整路径编写了所有命令。我通过查看 ps aux | 检查它是否有效。 grep openRTPS 并查看打开的进程。当我从命令行运行脚本时,进程会关闭,但通过 cron 作业它们只会保持打开状态。
在某些版本中,我在开始时有一个 touch bla,所以我确实知道这个特定的脚本正在执行,但不是所有命令。
答案1
如果作业或脚本没有按照您的预期进行操作,一个非常有用的故障排除技巧是将其添加set -x
到脚本的顶部,并检查输出以确保脚本正在按照您的预期进行操作。思考它正在做。您很可能对运行时环境做出了一些未在现场得到证实的假设或推定。