我的 cronjob 上有这样一行:
22 9 * * 1-5 cd ~/execution/samples/Cpp/data_logger/; ./data_logger_static 127.0.0.1 $TWS_LIVE_PORT &> SPY-STK.csv
它工作得很好,并将一堆数据写入一个名为SPY-STK.csv
.
但是,我最近将其连接到远程服务器,但它已停止工作。文件已创建,但它只是空的。到处都是相同的代码,我也试图保持操作系统相同。不知道要检查什么。
- 旧本地机器操作系统:Ubuntu 22.04
- 新的远程机器操作系统:Ubuntu 23.10
- 旧 bash 版本:GNU bash,版本 5.1.16(1)-release (x86_64-pc-linux-gnu)
- 新的远程机器 bash:GNU bash,版本 5.2.15(1)-release (x86_64-pc-linux-gnu)
我感兴趣的输出来自错误输出流(即std::cerr
在 C++ 中)。
stdout
&>
+stderr 重定向是一种bashism - cron 作业的默认 shell/bin/sh
会将其解释为&
(将作业置于后台)和>
(仅重定向 stdout)。所以要么使用 POSIX 重定向
或者在作业输入之前将 cron shell 设置为 bash
(像这样的变量扩展
$TWS_LIVE_PORT
在 sh 和 bash 中都应该用双引号引起来。)