
これが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'\""