リモートサーバーへのバックアップに使用する小さなshスクリプトがあります。それは何年もUbuntu 16.04で動作しましたが、現在18.04では失敗します。最初はアナクロンの問題だと思っていましたが、今はスクリプト自体やダッシュの問題だと思います。これが起こっていることです:
stefan@stefan-Aspire-F5-573T:/etc/cron.daily$ Sudo chmod +x rsync-doc-script
[Sudo] Mot de passe de stefan :
stefan@stefan-Aspire-F5-573T:/etc/cron.daily$ ./rsync-doc-script
/bin/sh: 0: Can't open *
stefan@stefan-Aspire-F5-573T:/etc/cron.daily$ sh rsync-doc-script
opening connection using: ssh -i /home/stefan/.ssh/id_rsa -l totem MouseHouse rsync --server -vvlogDtprze.iLsfxC . /totembackup/totemdoc (11 args)
ssh: connect to Host mousehouse port 22: Connection refused
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(235) [sender=3.1.2]
stefan@stefan-Aspire-F5-573T:/etc/cron.daily$
エラーcan't open *
により、run-parts
によるスクリプトの実行が正しく実行されません。このエラーが発生するのはなぜですか?
最後の行でスクリプトが実行されたときに接続を確立できなかったことは関係ありません。サーバーは現在オフになっています。
スクリプトは次のとおりです。
#!/bin/sh *
rsync -azvv -e "ssh -i /home/stefan/.ssh/id_rsa" /home/stefan/Documents/ totem@MouseHouse:/totembackup/totemdoc
はっきりとはわかりませんが、最初の行にタイプミスがあり、右側に「*
」が残っているようです。
#!/bin/sh *
^^^右にスクロールして確認してください。
$ cat script.bash
#!/bin/sh *
echo hi
直接実行:
$ ./script.bash
/bin/sh: *: No such file or directory
sh
経由で実行:
$ sh script.bash
hi
通常、シバンで期待しているシェルをそのまま使用することをお勧めします。 dash
や他のシェルが使用されていると思われる問題が発生していると思われる場合は、#!/bin/sh
をShebang #!/bin/bash
に変更することで、常に明示的にShebangにすることができます。
上記は、以下のコメントに基づいています。
しかし今は、スクリプト自体またはダッシュの問題だと思います。