read_data.txt
我在目录中调用了文本文件/var/www/html/
。我想在curl
文件内容发生变化时读取数据。所以我创建了一个bash
脚本。它在内容改变的同时读取数据,并通过邮件发送内容。但我想将该数据发送到特定的网址,而不是邮件。
我正在使用下面的脚本。
curl -d data=@/var/www/html/read_data.txt" http://domain.tld/testing_receive_data/index.php/check_data_controller/check_data
上面的 URL 正在接收所有 post 数据,并通过json_encode
php 函数将 post 数组转换为 JSON 数据并记录下来。
curl -d data=@/var/www/html/read_data.txt" http://domain.tld/testing_receive_data/index.php/check_data_controller/check_data
当我在 Linux shell 中运行上面的代码时,JSON 数据显示为空:{"data"=[]}
答案1
我可以想到一些可能的原因。
- 您的程序写入文件时
read_data.txt
,它以独占方式锁定了该文件,因此curl
无法打开该文件。在这种情况下,您可以轻松地使用另一个程序进行测试,以使用cat
或转储内容tail
- 当文件
read_data.txt
获取更多数据并附加其内容时,我不明白为什么您不等待文件完成,发布的数据不完整,因此您的 php 程序无法将它们转换为 json。检查 php 端的输入。
一种可能的解决方案是,read_data.txt
您可以将其下载到 tmp 文件,例如read_data.x4GwkQ.txt
,当您完成任务时,如果您没有专门锁定它(O_EXCL
在打开功能)。
或者,只需将它们绑定在外部锁定文件中,并使用flock
. 哪些 Unix 命令可以用作信号量/锁?