在linux中读取文本文件时获取空数据并通过cURL将读取的数据发送到url

在linux中读取文本文件时获取空数据并通过cURL将读取的数据发送到url

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_encodephp 函数将 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

我可以想到一些可能的原因。

  1. 您的程序写入文件时read_data.txt,它以独占方式锁定了该文件,因此curl无法打开该文件。在这种情况下,您可以轻松地使用另一个程序进行测试,以使用cat或转储内容tail
  2. 当文件read_data.txt获取更多数据并附加其内容时,我不明白为什么您不等待文件完成,发布的数据不完整,因此您的 php 程序无法将它们转换为 json。检查 php 端的输入。

一种可能的解决方案是,read_data.txt您可以将其下载到 tmp 文件,例如read_data.x4GwkQ.txt,当您完成任务时,如果您没有专门锁定它(O_EXCL打开功能)。

或者,只需将它们绑定在外部锁定文件中,并使用flock. 哪些 Unix 命令可以用作信号量/锁?

相关内容