thực hiện lệnh sqlite từ xa


8

Nếu điều này nên được chuyển sang trao đổi DBA, tôi xin lỗi. Cảm thấy giống linux hơn DB đối với tôi, vì vậy hãy vào đây:

Tôi đã có một số máy chạy các công việc định kỳ theo lịch trình mỗi đêm và gửi email cho tôi đầu ra. Tôi không muốn email cho những thứ như thế này. Nói chung tôi nghĩ rằng cách chúng ta sử dụng email bị hỏng, nhưng đó là một câu chuyện khác.

Vì vậy, tôi bắt đầu nghĩ rằng tôi có thể giữ một cơ sở dữ liệu SQLite trung tâm lưu trữ thông tin về thời điểm các công việc bắt đầu và kết thúc, và thậm chí có thể là đầu ra. Sau đó, tôi chỉ có thể xây dựng một trang web truy vấn đó và cho tôi biết đang diễn ra tối qua.

Vì vậy, tôi đã đưa ra một lược đồ đơn giản và có thể chạy lệnh này khi bắt đầu tập lệnh.

sqlite3 dbname.db "UPDATE data SET LastStart = DATETIME('NOW') WHERE TaskName = 'taskname'"

Vì vậy, bây giờ tôi có một hồ sơ nói rằng công việc của tôi bắt đầu và vào thời gian nào. Hoan hô. Sau đó tôi có thể chạy một lệnh tương tự để đặt thời gian mà công việc kết thúc.

Vì thế. Điều đó hoạt động rất tốt nếu cơ sở dữ liệu và các tác vụ trên cùng một máy. Tôi đi đến một máy khác và cần cập nhật cơ sở dữ liệu sqlite .... Làm thế nào tôi có thể làm điều đó một cách hiệu quả?

Tôi đã thử nó

ssh aaron@10.1.150.53 'sqlite3 /home/aaron/dbname.db "UPDATE data SET LastStart = DATETIME('NOW') WHERE TaskName = 'taskname'"'

Nhưng điều đó trả về:

Error: no such column: NOW

Tôi đã thử một số biến thể nhưng không đi đến đâu.

Tôi có thân thiết không? Tôi có nên làm một cái gì đó hoàn toàn khác nhau? Tôi có phát minh lại bánh xe không?

Câu trả lời:


10

Đó là tất cả xuất phát từ trích dẫn. Hãy thử cái này:

ssh aaron@10.1.150.53 'sqlite3 /home/aaron/dbname.db "UPDATE data SET \
LastStart = DATETIME('''NOW''') WHERE TaskName = '''taskname'''"'

ps. Bạn cần trích dẫn NOW, nếu không sqlite sẽ cố gắng tìm cột có tên như vậy. Nhưng trích dẫn của bạn 'sẽ được ăn bởi trích dẫn từ ssh. Bạn không thể thoát ', do đó, ba trích dẫn '''được sử dụng (trích dẫn ssh đầu tiên, thứ hai là trích dẫn bạn cần chuyển sang sqlite và một trích dẫn ssh mở cuối cùng một lần nữa).

pps. Hơn nữa, bạn có thể đảo ngược trích dẫn như thế này:

ssh aaron@10.1.150.53 "sqlite3 /home/aaron/dbname.db \"UPDATE data SET \
LastStart = DATETIME('NOW') WHERE TaskName = 'taskname'\""

Lệnh đầu tiên bạn đưa ra không hoạt động; cùng một vấn đề.
LVLAaron

2
Lệnh thứ hai, tuy nhiên, hoạt động tuyệt vời.
LVLAaron
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.