이것이 DBA 정보센터로 옮겨졌어야 했다면 사과드립니다. 나에게는 DB라기보다는 Linux에 더 가깝다고 느껴집니다.
매일 밤 예약된 크론 작업을 실행하고 결과를 이메일로 보내는 시스템이 있습니다. 나는 이 이메일을 원하지 않습니다. 전반적으로 우리가 이메일을 사용하는 방식이 잘못되었다고 생각합니다. 하지만 그것은 또 다른 이야기입니다.
그래서 저는 작업이 시작되고 완료된 시점에 대한 정보는 물론 출력까지 저장하기 위해 중앙 SQLite 데이터베이스를 유지할 수 있다고 생각하기 시작했습니다. 그런 다음 어젯밤에 무슨 일이 일어났는지 쿼리하고 알려주는 웹 페이지를 구축할 수 있습니다.
그래서 저는 간단한 아키텍처를 생각해 냈고 스크립트 시작 부분에서 이 명령을 실행할 수 있습니다.
sqlite3 dbname.db "UPDATE data SET LastStart = DATETIME('NOW') WHERE TaskName = 'taskname'"
이제 작업이 언제 시작되었는지 기록이 생겼습니다. 오랫동안 살다. 그런 다음 유사한 명령을 실행하여 작업이 종료되는 시간을 설정할 수 있습니다.
그래서. 이는 데이터베이스와 작업이 동일한 시스템에 있는 경우 잘 작동합니다. 다른 컴퓨터로 옮겼는데 sqlite 데이터베이스를 업데이트해야 합니다. 어떻게 효율적으로 수행할 수 있나요?
나는 이것을 시도했다
ssh [email protected] 'sqlite3 /home/aaron/dbname.db "UPDATE data SET LastStart = DATETIME('NOW') WHERE TaskName = 'taskname'"'
그러나 이것은 다음을 반환합니다.
Error: no such column: NOW
몇 가지 변형을 시도했지만 진전이 없었습니다.
나는 가까운가? 완전히 다른 일을 해야 할까요? 나는 바퀴를 재발명하고 있는가?
답변1
그것은 모두 인용문에서 비롯됩니다. 이 시도:
ssh [email protected] 'sqlite3 /home/aaron/dbname.db "UPDATE data SET \
LastStart = DATETIME('''NOW''') WHERE TaskName = '''taskname'''"'
추신: 인용문이 필요합니다. NOW
그렇지 않으면 sqlite는 그러한 이름을 가진 열을 찾으려고 시도합니다. 그러나 귀하의 참조는 '
ssh의 참조에 의해 삼켜질 것입니다. 이스케이프할 수 없으므로 '
세 개의 따옴표가 사용됩니다 '''
(첫 번째는 ssh 인용, 두 번째는 sqlite에 전달해야 하는 인용, 마지막은 다시 open ssh 인용입니다).
pps. 또한 다음과 같이 백틱을 수행할 수 있습니다.
ssh [email protected] "sqlite3 /home/aaron/dbname.db \"UPDATE data SET \
LastStart = DATETIME('NOW') WHERE TaskName = 'taskname'\""