当我通过 cron 运行以下 bash 脚本时,最后一行在前一行完成之前运行。为什么?我怎样才能执行我想要的命令?
我确信这cron是罪魁祸首,但为了争论,这里有一个虚拟的bash 脚本 (显然,这只是一个例子。在现实世界中,我正在 python 程序中做一些工作,然后尝试完成后将其工作产品复制到另一个地方。):
#!/usr/bin/env bash
cd /tmp/kier/script
script output -c "./sleeper.py; echo '...and we are done'"
echo "This is the next line after invoking script..."
...为了完整起见,这里是python 脚本,sleeper.py:
#!/usr/bin/env python3
import time
print("python program starting")
time.sleep(5)
print("python program done")
当我从命令行运行 bash 脚本时,一切都很好。具体来说,“This is the next line...”文本在 5 秒睡眠后的最后打印。
但是当我从 cron 运行它时,输出顺序错误(这是 cron 运行作业后发给我的电子邮件):
Script started, file is output
Script done, file is output
This is the next line after invoking script...
python program starting
python program done
...and we are done
Script started, file is output
所以你可以看到“这是下一行......”在 python 脚本真正启动之前打印出来。就好像它在后台运行 python 脚本一样。
我很难过。为什么会发生这种情况,如何让echo命令等到scriptpython 程序运行完毕?
(最后,是的,我可以在发送到的命令中包含我的额外命令script,我实际上正在考虑这一点。但是来吧!这太疯狂了!)
小怪兽爱吃肉
相关分类