首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行远程sqlite命令

执行远程sqlite命令
EN

Unix & Linux用户
提问于 2012-06-25 19:20:32
回答 1查看 15.4K关注 0票数 8

如果这件事应该转移到DBA交易所,我道歉。对我来说,感觉更像是linux而不是DB,下面是这样的:

我有一些机器每天晚上运行预定的cron任务,并将输出通过电子邮件发送给我。我不想为这种事发电子邮件。一般来说,我认为我们使用电子邮件的方式是坏的,但这是另一个故事。

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

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

代码语言:javascript
复制
sqlite3 dbname.db "UPDATE data SET LastStart = DATETIME('NOW') WHERE TaskName = 'taskname'"

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

所以。如果数据库和任务位于同一台计算机上,这将非常有效。我去另一台机器,需要更新sqlite数据库.我怎么能有效地做到这一点呢?

我试过这个

代码语言:javascript
复制
ssh aaron@10.1.150.53 'sqlite3 /home/aaron/dbname.db "UPDATE data SET LastStart = DATETIME('NOW') WHERE TaskName = 'taskname'"'

但这一结果是:

代码语言:javascript
复制
Error: no such column: NOW

我试过一些变体,但什么也没得到。

我接近了吗?我应该做些完全不同的事吗?我在重新发明方向盘吗?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2012-06-25 19:26:47

所有这些都来自于引用。试试这个:

代码语言:javascript
复制
ssh aaron@10.1.150.53 'sqlite3 /home/aaron/dbname.db "UPDATE data SET \
LastStart = DATETIME('''NOW''') WHERE TaskName = '''taskname'''"'

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

pps。此外,您还可以反引用如下所示:

代码语言:javascript
复制
ssh aaron@10.1.150.53 "sqlite3 /home/aaron/dbname.db \"UPDATE data SET \
LastStart = DATETIME('NOW') WHERE TaskName = 'taskname'\""
票数 10
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/41611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档