원격 sqlite 명령 수행

원격 sqlite 명령 수행

이것이 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에 전달해야 하는 따옴표, 마지막 따옴표는 ssh 따옴표를 다시 엽니다).

pps. 또한 다음과 같이 따옴표를 뒤집을 수도 있습니다.

ssh [email protected] "sqlite3 /home/aaron/dbname.db \"UPDATE data SET \
LastStart = DATETIME('NOW') WHERE TaskName = 'taskname'\""

관련 정보