linux - RRDTool, lua-script에서 os-execute-call을 사용하여 png 파일을 얻는 방법?



lua execute (0)

긴 텍스트지만, 스크립트 추출물 등이 없을 수도 있습니다. 아마도 설명하기 어려울 수도 있고 질문의 배경을 이해할 수도 있습니다.

소개:

Raspberry & Domoticz에서 RRDTool을 사용하여 RRD 파일을 만들고 필요에 따라 lua 스크립트 및 관련 sh 파일을 통해 업데이트 할 수 있지만 같은 구조의 그래프를 만들 때는 몇 가지 문제가 있습니다.

그것은 그래프 작성 sh- 파일로 호출이 커맨드 라인에서 또는 os.execute를 통해 lua 스크립트 내에서 어떻게 생성되는지 여부를 결정합니다

cron에서이 sh 파일을 실행하려고 시도했지만 때로는 덜 엉뚱한 동작을 보이기도했습니다. 디버깅 기능으로 인해 sh- 파일로 테스트를 실행하기 위해 lua 스크립트 또는 유사한 솔루션을 선호하기 때문입니다.

'문제'는 스크립트 라인 2에 대한 sh 파일의 경로 정의에서의 미묘함과 관련이 있다고 의심하지만 'culprits'에 내 손가락을 놓을 수는 없습니다. 경험적으로 실용적인 방법을 찾아 냈지만 '왜?'에 대한 설명을 환영합니다. 4 가지 질문에서.

질문 1:

os.execute에서 실행하는 것과는 달리 commandline에서 실행하는 4 개의 호출에 대해 서로 다른 응답 (아래에 설명)이있는 이유는 무엇입니까?

테스트 및 결과에 대한 설명

작업 디렉토리는 / home / pi입니다.

RRDTool-files가있는 폴더는 usr / bin /

모든 sh 파일과 rrd 파일은 / home / pi 폴더에 있으며 속성은 755로 설정되어 있습니다

pitemp1.rrd에서 pitemp1.png를 생성하기 위해 create_ pitemp1 _graph.sh 스크립트를 작성하십시오.

두 번째 스크립트 라인이 rrdtool 그래프를 호출하고 [어느?] 폴더에 png 파일을 넣을 수 있도록 활성화되어 있습니다. 두 번째 줄이 / usr / bin / rrdtool graph /home/pi/pitemp1.png \로 변경되면 'permission denied'라는 오류 메시지가 나타납니다.

#!/bin/bash
/usr/bin/rrdtool graph pitemp1.png \
#rrdtool graph pitemp1.png \
  DEF:temp_1h=/home/pi/pitemp1.rrd:temp1H:AVERAGE \
  DEF:temp_2l=/home/pi/pitemp1.rrd:temp2L:AVERAGE \
  DEF:temp_3s=/home/pi/pitemp1.rrd:temp3S:AVERAGE \
  LINE1:temp_1h#5fd00b:Temp_tuin_hoog \
  LINE1:temp_2l#0000ff:Temp_tuin_laag \
  LINE1:temp_3s#ff0000:Temp_tuin_bodem \
  COMMENT:"\t\t\t\t\t\t\l" \
  COMMENT:"\t\t\t\t\t\t\l" \
  GPRINT:temp_1h:LAST:"Temp_tuin_hoog    Laatste\: %2.1lf" \
  GPRINT:temp_1h:MAX:"  Max.\: %2.1lf" \
  GPRINT:temp_1h:MIN:"  Min.\: %2.1lf" \
  COMMENT:"\t\t\t\t\t\t\l" \
  GPRINT:temp_2l:LAST:"Temp_tuin_laag    Laatste\: %2.1lf" \
  GPRINT:temp_2l:MAX:"  Max.\: %2.1lf" \
  GPRINT:temp_2l:MIN:"  Min.\: %2.1lf" \
  COMMENT:"\t\t\t\t\t\t\l" \
  GPRINT:temp_3s:LAST:"Temp_tuin_bodem   Laatste\: %2.1lf" \
  GPRINT:temp_3s:MAX:"  Max.\: %2.1lf" \
  GPRINT:temp_3s:MIN:"  Min.\: %2.1lf" \
  COMMENT:"\t\t\t\t\t\t\l" \
  --width 700 --height 400 \
  --title="Temperatuur van laatste 24 uur" \
  --vertical-label="Temp.(C)"
# Copy picture to directory of local website
# cp /home/pi/pitemp1.png /var/www/html

pitemp1.rrd에서 pitemp1.png를 만들려면 create_ pitemp1A _graph.sh 스크립트를 작성하십시오.

위의 sh 파일과 동일하지만 rrdtool 그래프를 호출하고 png 파일을 / home / pi 폴더에 저장하는 세 번째 스크립트 라인이 활성화되었습니다.이 sh- 파일이 명령 줄에서 실행되면 오류 메시지없이 실행됩니다. 예상대로 / home / pi에 도착하는 png 파일

#!/bin/bash
#/usr/bin/rrdtool graph pitemp1.png \
rrdtool graph /home/pi/pitemp1.png \
  DEF:temp_1h=/home/pi/pitemp1.rrd:temp1H:AVERAGE \
  DEF:temp_2l=/home/pi/pitemp1.rrd:temp2L:AVERAGE \
  DEF:temp_3s=/home/pi/pitemp1.rrd:temp3S:AVERAGE \
  LINE1:temp_1h#5fd00b:Temp_tuin_hoog \
  LINE1:temp_2l#0000ff:Temp_tuin_laag \
  LINE1:temp_3s#ff0000:Temp_tuin_bodem \
  COMMENT:"\t\t\t\t\t\t\l" \
  COMMENT:"\t\t\t\t\t\t\l" \
  GPRINT:temp_1h:LAST:"Temp_tuin_hoog    Laatste\: %2.1lf" \
  GPRINT:temp_1h:MAX:"  Max.\: %2.1lf" \
  GPRINT:temp_1h:MIN:"  Min.\: %2.1lf" \
  COMMENT:"\t\t\t\t\t\t\l" \
  GPRINT:temp_2l:LAST:"Temp_tuin_laag    Laatste\: %2.1lf" \
  GPRINT:temp_2l:MAX:"  Max.\: %2.1lf" \
  GPRINT:temp_2l:MIN:"  Min.\: %2.1lf" \
  COMMENT:"\t\t\t\t\t\t\l" \
  GPRINT:temp_3s:LAST:"Temp_tuin_bodem   Laatste\: %2.1lf" \
  GPRINT:temp_3s:MAX:"  Max.\: %2.1lf" \
  GPRINT:temp_3s:MIN:"  Min.\: %2.1lf" \
  COMMENT:"\t\t\t\t\t\t\l" \
  --width 700 --height 400 \
  --title="Temperatuur van laatste 24 uur" \
  --vertical-label="Temp.(C)"
# Copy picture to directory of local website
# cp /home/pi/pitemp1.png /var/www/html

커맨드 라인에서 4 번의 호출에 대한 응답

커맨드 라인에서 PuttySSH를 통해 sh- 파일을 호출하면 script-version pitemp1A를 사용하는 두 번의 호출은 오류보고없이 / home / pi /에 png 파일을 저장하지만 script-version pitemp1을 사용하는 두 번의 호출은 다음과 같이 오류를 발생시킵니다. /home/pi/pitemp1.rrd 파일은 처음 [?] 호출이 성공한 것으로 입증되면 [?] 존재합니다.

[email protected]:~$ sudo /home/pi/create_pitemp1A_graph.sh                        
797x529
[email protected]:~$ ./create_pitemp1A_graph.sh
797x529
[email protected]:~$ sudo /home/pi/create_pitemp1_graph.sh
/home/pi/create_pitemp1_graph.sh: line 5: DEF:temp_1h=/home/pi/pitemp1.rrd:temp1H:AVERAGE: No such file or directory
[email protected]:~$ ./create_pitemp1_graph.sh
./create_pitemp1_graph.sh: line 5: DEF:temp_1h=/home/pi/pitemp1.rrd:temp1H:AVERAGE: No such file or directory

1A- 스크립트에서 응답 할 때 명령 줄에서 호출하는 동안 최종선이 '활성'입니다.

[email protected]:~$ ./create_pitemp1A_graph.sh
797x529
cp: cannot create regular file ‘/var/www/html/pitemp1.png’: Permission denied

관련 질문 2 : 그래프가 생성되었지만 복사가 허가되지 않은 이유는 무엇입니까?

다음은 lua 스크립트에서 sh- 파일을 호출하는 성공적인 설정입니다. command 섹션은 commandArray {}와 return commandArray 사이의 스크립트 섹션에 있습니다 (아래 인용 됨).

-- Line 259, Export of data = update of rrd database(s) and generation of graph
-- Line 260, Extract current date as date.year, date.month, date.day, date.hour, date.min, date.sec
date = os.date("*t")
-- Line 262, Update RRDs
-- The RRDs have internal setting for update within 5 minutes
   os.execute ('rrdtool update /home/pi/pitemp1.rrd N:'..temp1H..':'..temp1D..':'..temp2L..':'..temp2D..':'..temp3S)
   print ('Script temp_hum_fill_rrd 1st database updated!')

-- Line 273, Graph info from the RRDs
if (date.min % Interval1 == Offset1) then
   os.execute ('sudo /home/pi/create_pitemp1A_graph.sh')
   print ('Script create_pitemp1A_graph completed!')
end

Domoticz-log와 결과에 따르면 위의 스크립트 라인에는 오류가 없으며 전체 스크립트에는 오류가 없습니다. 관련 rrd-files와 관련 png 파일은 update-update에 따라 time-stamp가있는 / home / pi에 있습니다. 간격 및 오프셋.

2017-11-11 12:30:00.539 LUA: Script temp_hum_fill_rrd 1st database updated!
2017-11-11 12:30:00.582 LUA: Script create_pitemp1A_graph completed!
2017-11-11 12:30:00.583 LUA: End of temp_hum rrd-script 

그러나 질문 3 : 'sudo /home/pi/create_pitemp1A_graph.sh'를 사용해야하는 이유는 무엇입니까? / home / pi /가 사용자의 작업 디렉토리이기 때문에 './create_pitemp1A_graph.sh'를 사용하는 것으로 충분합니다.

후속 파일 업로드는 Python 파일에 의해 수행됩니다.이 파일은 작업 디렉토리 / home / pi에서 내 서버로 파일을 복사합니다. 다른 업로드 방법은 Allway Sync와 같은 동기화 프로그램을 사용하여 파일을 '원격으로 파악'하는 것입니다.

소개에서 언급했듯이, 그것은 작동하지만, ;-) 왜?





lua