Linux에서 텍스트 파일을 읽는 동안 빈 데이터를 얻고 cURL을 통해 읽은 데이터를 URL로 보내는 중

Linux에서 텍스트 파일을 읽는 동안 빈 데이터를 얻고 cURL을 통해 읽은 데이터를 URL로 보내는 중

read_data.txt디렉토리에 있는 텍스트 파일을 호출했습니다 /var/www/html/. curl파일 내용이 변경되면 데이터를 읽고 싶습니다 . 그래서 스크립트를 만들었습니다 bash. 콘텐츠가 변경되면 데이터를 읽고 이메일을 통해 콘텐츠를 보냅니다. 그런데 그 데이터를 메일이 아닌 특정 URL로 보내고 싶습니다.

아래 스크립트를 사용하고 있습니다.

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

위 URL은 모든 게시물 데이터를 받아 json_encodephp 함수를 통해 게시물 배열을 JSON 데이터로 변환하여 기록하고 있습니다.

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

Linux 셸에서 위 코드를 실행하면 JSON 데이터가 비어 있는 것으로 나타납니다.{"data"=[]}

답변1

몇 가지 가능한 이유를 생각해 볼 수 있습니다.

  1. 프로그램이 파일에 쓸 때 read_data.txt파일을 단독으로 잠그므로 curl파일을 열 수 없습니다. 이 경우 다른 프로그램으로 쉽게 테스트하여 cat내용을 소비하거나 덤프 할 수 있습니다.tail
  2. 파일이 read_data.txt더 많은 데이터를 얻고 내용을 추가할 때 파일이 완료될 때까지 기다리지 않는 이유를 이해할 수 없습니다. 게시된 데이터는 불완전하므로 PHP 프로그램에서 해당 데이터를 json으로 변환할 수 없습니다. PHP 측에서 입력을 확인하십시오.

한 가지 가능한 해결책은 read_data.txt예를 들어 read_data.x4GwkQ.txt작업을 완료할 때 특별히 잠그지 않은 경우 O_EXCL(열려 있는기능).

또는 외부 잠금 파일에 바인딩하고 flock. 세마포어/잠금으로 사용할 수 있는 Unix 명령은 무엇입니까?

관련 정보