0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

sleepという荒業

Last updated at Posted at 2021-02-06

ラズパイのカメラ画像データ(定期撮影)を、自動でサーバーと同期させたくてrsyncです。
ちょっとはまって一応解決できたので共有します。
一応=後述の通り、あまりスマートな解決策ではない気もします。

このスクリプトを実行するとあっさり動きます、ちょっと感動します、イケないことをしている感もあります。


#!/bin/sh
expect -c "
  spawn rsync -arv 同期元ディレクトリ 同期先ユーザー名@同期先ホスト:同期先ディレクトリ
  expect \"Password:\"
  send \"同期先ユーザーのパスワード\n\"
  interact
"

しかし、Cronから実行すると沈黙します。
ええぇぇ…そんなことあるのかしら。

interact命令は、「制御をユーザに返す」ことを指示します。
そのため、cron の場合、制御を返されても引き継ぐユーザーがおらず、正常に動作していなかったようです。

なるほど。

#!/bin/sh
expect -c "
  spawn rsync -arv 同期元ディレクトリ 同期先ユーザー名@同期先ホスト:同期先ディレクトリ
  expect \"Password:\"
  send \"同期先ユーザーのパスワード\n\"
  expect eof
  exit
"

Cronから実行すると、同期先ディレクトリにテンポラリファイルが一瞬出来て、動いた気がしました。
ターミナルで実行すると、同期対象のリストまでは表示されますが、そのまま終了してしまいます。

https://stackoverflow.com/questions/18502236/rsync-giving-error-when-executing-witin-expect-script-using-cron
の通りにしたら機能しました。

#!/bin/sh
expect -c "
  spawn rsync -arv 同期元ディレクトリ 同期先ユーザー名@同期先ホスト:同期先ディレクトリ
  expect \"Password:\"
  send \"同期先ユーザーのパスワード\n\"
  expect eof
  sleep 90
  exit
"

exitをsleepさせるって…荒業ですが、まあいいか。
同期が完了しない場合は、次回の同期に先送りされるのが、ちょっと嫌な感じです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?