如果应该将其转移到 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'\""