リモートsqliteコマンドの実行

リモートsqliteコマンドの実行

これがDBA情報センターに移動されなければならなかった場合は謝罪します。私にとっては、DBというよりはLinuxに近いと感じています。

毎晩予約されたクローンジョブを実行し、結果を電子メールで送信するシステムがあります。私はこのメールが欲しくありません。全体的に、私たちが電子メールを使用する方法が間違っていると思います。しかし、それは別の話です。

だから私は、作業が開始され、完了した時点に関する情報だけでなく、出力まで保存するために中央のSQLiteデータベースを維持できると考え始めました。その後、昨夜何が起こったのかを照会して通知するWebページを構築できます。

だから私は単純なアーキテクチャを思いついたので、スクリプトの始めからこのコマンドを実行できます。

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'''"'

PS:引用文が必要です。NOWそれ以外の場合、sqliteはそのような名前の列を見つけることを試みます。しかし、あなたの参照は'sshの参照によって飲み込まれます。エスケープできないため、'3つの引用符が使用されます'''(最初はssh引用、2番目はsqliteに渡す必要がある引用、最後はopen ssh引用です)。

pps。また、次のようにバックティックを実行できます。

ssh [email protected] "sqlite3 /home/aaron/dbname.db \"UPDATE data SET \
LastStart = DATETIME('NOW') WHERE TaskName = 'taskname'\""

おすすめ記事