执行远程sqlite命令

执行远程sqlite命令

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

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

所以我开始考虑我可以保留一个中央 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'\""

相关内容