I have text file called read_data.txt in /var/www/html/ directory. I want to read data by curl while file contents will change. So I have created a bash script. It is reading data while the content is changed, and sends the content over mail. But instead of mail, I want to send that data to a specific url.

I am using the script below.

curl -d data=@/var/www/html/read_data.txt" http://domain.tld/testing_receive_data/index.php/check_data_controller/check_data

The above URL is receiving all post data and converting post array to JSON data by json_encode php function and logs it.

curl -d data=@/var/www/html/read_data.txt" http://domain.tld/testing_receive_data/index.php/check_data_controller/check_data

When I am running above code in the Linux shell, the JSON data is shown empty: {"data"=[]}


I can think some possible causes.

  1. Your program writing the file read_data.txt, it locked the file exclusively, so curl couldn't open the file. In this case you can easily test with another program to just dump the contents using cat or tail
  2. While the file read_data.txt is getting more data, appending its contents, this is the point I'm not understanding why you didn't wait the file finished, the posted data is not complete, so your php program cannot translate them into json. Check your input from php side.

One possible solution is, rather than pouring the long&large data to the destination read_data.txt, you can just download it to a tmp file like read_data.x4GwkQ.txt and when you finishing the task, just rename(switch) it if you didn't lock it exclusively (O_EXCL in open function).

Or, just tie them up within an external lock file with flock. What Unix commands can be used as a semaphore/lock?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.