![Linux에서 텍스트 파일을 읽는 동안 빈 데이터를 얻고 cURL을 통해 읽은 데이터를 URL로 보내는 중](https://linux55.com/image/101577/Linux%EC%97%90%EC%84%9C%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%9D%BD%EB%8A%94%20%EB%8F%99%EC%95%88%20%EB%B9%88%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC%20%EC%96%BB%EA%B3%A0%20cURL%EC%9D%84%20%ED%86%B5%ED%95%B4%20%EC%9D%BD%EC%9D%80%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC%20URL%EB%A1%9C%20%EB%B3%B4%EB%82%B4%EB%8A%94%20%EC%A4%91.png)
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_encode
php 함수를 통해 게시물 배열을 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
몇 가지 가능한 이유를 생각해 볼 수 있습니다.
- 프로그램이 파일에 쓸 때
read_data.txt
파일을 단독으로 잠그므로curl
파일을 열 수 없습니다. 이 경우 다른 프로그램으로 쉽게 테스트하여cat
내용을 소비하거나 덤프 할 수 있습니다.tail
- 파일이
read_data.txt
더 많은 데이터를 얻고 내용을 추가할 때 파일이 완료될 때까지 기다리지 않는 이유를 이해할 수 없습니다. 게시된 데이터는 불완전하므로 PHP 프로그램에서 해당 데이터를 json으로 변환할 수 없습니다. PHP 측에서 입력을 확인하십시오.
한 가지 가능한 해결책은 read_data.txt
예를 들어 read_data.x4GwkQ.txt
작업을 완료할 때 특별히 잠그지 않은 경우 O_EXCL
(열려 있는기능).
또는 외부 잠금 파일에 바인딩하고 flock
. 세마포어/잠금으로 사용할 수 있는 Unix 명령은 무엇입니까?