- ベストアンサー
CRON で シェル を動かしたい
Fedora Core で バックアップを取るため夜にJOBを実行させたく思っています。調べた所crontabでスケジュールできるとの事なのでテストをしているのですがうまくいきません。 1. mkdir /home/postgres/BKUP/test このコマンドをcrontab -e に直接書くと狙った時間にtestフォルダが作成されます。 2. バックアップを取る際はもう少し色々やることになると思うのでシェルにして実行させました。ここではテストなので先ほどと同じ分をシェルに書いてcrontab -eでスケジュールしますが作成されません。 ***シェルの内容*** #!/bin/sh mkdir /home/postgres/BKUP/test *********************************** ・/var/log には履歴がかかれていました。 ・シェルには全ての権限をつけました。(777) 何がいけないのでしょうか?教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> [user@dedede test^M]$ ls ↑のプロンプトのディレクトリ名に^M(CR)が付いているのと > user@dedede ~/BKUP]$ ./bkup.sh > ./bkup.sh: コマンドが見つかりません. > [user@dedede ~/BKUP]$ sh ./bkup.sh > : command not found ↑の結果からたぶんそうだと思いますが、もしかして、シェルスクリプト(bkup.sh)は、Windows上で作成したのをLinux(Fedora Core)側に持ってきて実行していたりしませんか? もしそうならWindowsとUNIX(Linux)の改行コードの違いから、Linux側でシェルスクリプトのファイルを見ると全ての行の最後にゴミ(CR)が付いているように見えるので実行しても正常に実行出来ません。 Windowsの改行コードはCRLF、UNIXの改行コードはLRなので、Windowsの改行コードCRLFのCR(^Mで見える)がUNIXからみたらゴミになります。 例えば、 $ tr -d '\r' < bkup.sh > bkup2.sh を実行して、CR(^M)を取り除いてから、 $ chmod +x bkup2.sh $ ./bkup2.sh か $ sh ./bkup2.sh と実行するとエラーないで正常終了したりしません?
その他の回答 (4)
- sick65
- ベストアンサー率46% (12/26)
>user@dedede ~/BKUP]$ ./bkup.sh コマンドがないという事で、フルパスでシェル実行はどうなりますか? 『sh ./bkup.sh』で『: command not found』だとshコマンドはないっぽいですね。 又、『test?』が出来たという事で、mkdirの部分がおかしいのではとも思ってしまったり。。。 sh実行場所に生成するなら『mkdir test』だけでよいかと。
- sick65
- ベストアンサー率46% (12/26)
No2です。 >[user@dedede ~/BKUP]$ ./ bkup.sh 『./』と『bkup.sh』の間のスペースは必要ないと思うのですが どうでしょうか? あと、fedoraだとbashかなと思ったので、シェルの頭は 『#!/bin/bash』に変更してみるか 実行コマンドを『sh ./bkup.sh』としてみるか こんなとこですかね・・・。
補足
#!/bin/bash に変えてみました。 実行するとコマンドが見つからないとの事です。 ******************************************* user@dedede ~/BKUP]$ ./bkup.sh ./bkup.sh: コマンドが見つかりません. [user@dedede ~/BKUP]$ sh ./bkup.sh : command not found ******************************************** ちなみに以下の フォルダ? が出来ました。 コマンドからだと入れますが FFFTP から入ろうとすると 550 test:No such file or directory として開くことが出来ません。 ******************************************** user@dedede ~/BKUP]$ ls bkup.sh test? [user@dedede ~/BKUP]$ cd test? [user@dedede test^M]$ ls ********************************************
- sick65
- ベストアンサー率46% (12/26)
シェルを直に実行した場合、成功するのでしょうか? あと出来たらcronの内容も見てみたいです。
補足
>シェルを直に実行した場合、成功するのでしょうか 以下の通り失敗しました。ちなみにBKUPフォルダの権限も777で全て許可にしてあります。 rootでも駄目でした。 ************************* [user@dedede ~/BKUP]$ ./ bkup.sh ./: 許可がありません. ************************* ************************* [root@dedede BKUP]# ./ bkup.sh bash: ./: is a directory [root@icadwww BKUP]# ************************* cronの内容です。 ******************************* [user@dedede ~/BKUP]$ crontab -l 48 15 * * * /home/postgres/BKUP/bkup.sh *******************************
- g_liar
- ベストアンサー率52% (382/728)
mkdirにパスが通ってないのでは? 試しにシェルの内容を /bin/mkdir /home/postgres/BKUP/test などと、コマンド自身もフルパスで指定してみてください。 ※Fedoraは手元にないので/binではないかもしれません。 ※正確なパスはwhereisなどで調べてください。
補足
残念ながら成功しませんでした。 ※ /bin/ の中に mkdir があったのでmkdirのパスはその通りであると思います。 また思いついた事がありましたら教えてください。
補足
返事が遅くなり申し訳ありません。 状況は指摘の通りでして、対応方法も書いてある通りにすると実行できました。 cronからも実行成功しました。 一人では絶対わからなかったと思います。どうもありがとうございました。