执行远程sqlite命令

LVL*_*ron 8 ssh remote-management sqlite

如果这应该转移到 DBA 交换,我深表歉意。对我来说,感觉更像是 linux 而不是 DB,所以这里是:

我有一些机器每晚运行预定的 cron 作业并将输出通过电子邮件发送给我。我不想要这样的电子邮件。总的来说,我认为我们使用电子邮件的方式是坏的,但那是另一回事了。

所以我开始考虑我可以保留一个中央 SQLite 数据库来存储有关作业何时开始和完成的信息,甚至可能是输出。然后我可以建立一个网页来查询,让我知道昨晚发生了什么。

所以我想出了一个简单的模式,可以在脚本的开头运行这个命令。

sqlite3 dbname.db "UPDATE data SET LastStart = DATETIME('NOW') WHERE TaskName = 'taskname'"
Run Code Online (Sandbox Code Playgroud)

所以现在我有一个记录,说明我的工作是在什么时候开始的。万岁。然后我可以运行一个类似的命令来放置作业结束的时间。

所以。如果数据库和任务在同一台机器上,那效果很好。我去另一台机器,需要更新sqlite数据库......我怎样才能有效地做到这一点?

我试过这个

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

但这会返回:

Error: no such column: NOW
Run Code Online (Sandbox Code Playgroud)

我尝试了一些变体,但一无所获。

我很亲近吗?我应该做一些完全不同的事情吗?我是在重新发明轮子吗?

rus*_*ush 10

这一切都来自引用。试试这个:

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

附:您需要引用NOW,否则sqlite 将尝试查找具有此类名称的列。但是你的引号'会被 ssh 的引号吃掉。您无法逃脱',因此使用了三个引号'''(第一个关闭 ssh 引用,第二个是您需要传递给 sqlite 的引用,最后一个再次打开 ssh 引用)。

pps。此外,您可以像这样反引号:

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

  • 然而,第二个命令效果很好。 (2认同)