59576


クーロンで.cshを起動・実行し、サーバAからサーバBにファイルを転送したいと考えていますが、可能ですか？

不可能な場合、Linuxでサーバ間のファイル転送を日次で実行する方法を教えて下さい。


CC BY-SA 4.0
2019-10-08T12:27:11.177
59575
2019-10-10T05:18:48.673
2019-10-08T12:29:00.557
19110
36122
question
linux shell csh
C Shell でサーバ間のファイル転送は可能？


Cシェルそのものにサーバ間でのファイル転送機能はないので、やりたいことを実現するには  
`rsync` や `scp` コマンドが良いのかなと思います。

**参考:**

  * [rsync コマンド - ファイルやディレクトリを同期する](https://www.atmarkit.co.jp/ait/articles/1702/02/news031.html)
  * [scp コマンド - リモートマシンとの間でファイルをコピーする](https://www.atmarkit.co.jp/ait/articles/1701/27/news009.html)

これらを `cron` のジョブとして登録すれば日次実行が可能です。


CC BY-SA 4.0
2019-10-08T12:37:25.343
59576
2019-10-08T12:37:25.343
3060
59575
answer


シェルを問わず、Linux コマンドが使えるのであれば [scp
コマンド](https://tech.nikkeibp.co.jp/it/article/COLUMN/20070723/277942/)や [rsync
コマンド](https://tech.nikkeibp.co.jp/it/article/COLUMN/20070822/280169/)が使えます。

[code]

    scp 〈送るファイルのパス〉 serverB:〈送る先のパス〉
    rsync -chavzP 〈送るファイルのパス〉 serverB:〈送る先のパス〉
    
[/code]


CC BY-SA 4.0
2019-10-08T12:40:22.890
59577
2019-10-08T12:40:22.890
19110
59575
answer


cronでcshスクリプトを起動・実行し、サーバAからサーバBにファイルを転送することは可能です。

質問された方の環境が不明なので、杞憂かもしれませんが、  
cshスクリプトのシェバン(スクリプトの先頭に記述するコメント)が  
`#`だけの場合、cronがcshスクリプトを実行するときにエラーとなる場合があります。  
cronのデーモンがコマンドを実行するとき、スクリプトがcshで書かれているかを判断できません。シェバンをみて起動するシェルを決めます。

古い環境では、`#`だけの行があると、そのスプリプトは`csh`で書かれていると判断されますが、最近の環境では`#!/bin/csh`(※)と書いておかないと`csh`のスクリプトだと判断してもらえない可能性が高いです。※cshが/binに配置されているかは環境によります。

古い環境で作成されたcshスクリプトをベースに新しいスクリプトを書いたとき、cshの環境で動いていても、cronに登録すると動かないことはよくあります。


CC BY-SA 4.0
2019-10-10T04:47:19.917
59611
2019-10-10T04:47:19.917
35558
59575
answer


今どきピュア `ftp` は他の方法でセキュリティが担保されている場合に限定して使うべきで、普通は `rsync` なり `scp` なり
使うべきというのは皆様の書いている通りっす。

さらに追加するとシェルスクリプトを記述する場合は `bourne-shell` つまり `sh` あるいは `dash` で書くべきです。最近の Linux
に限定するなら `bash` の拡張文法を使ってもかまわないでしょうが `csh` で書くのはダメダメです。 [有害な csh
プログラミング](http://www.speech-lab.org/~hiroki/csh-whynot.euc) とか [Wikipedia の
cshell](https://ja.wikipedia.org/wiki/C_Shell) の批判の節とか参照。


CC BY-SA 4.0
2019-10-10T05:18:48.673
59612
2019-10-10T05:18:48.673
8589
59575
answer