最近、火星の荒涼とした砂漠を延々と
長時間チェックする事に飽き飽きしているので
(いつもの事やん。w)
ホームページの一部を
SSIとかPerl使って自動生成させて遊んでます。
先日、ブログのRSSを取り込んで、ホームページ上に
最新投稿のタイトルを自動的に表示できるようになりました。
cron使って定期的にスクリプトを廻しているので、
反映されるまで数時間かかるのですが、
cronの設定に手こずってしまいました。
どうがんばっても
: not found
とか
No such file or directory
の文字が...。
シェル上から直接実行すると問題なく実行されるのですが、
cron上で実行させるとエラーが返ってきます。
おかしいなあとおもったら、bashのパスが間違ってました。
さくらインターネットで使えるシェルのパス一覧 /etc/shellの内容
cat /etc/shells
/bin/sh
/bin/csh
/bin/tcsh
/usr/local/bin/bash
/usr/local/bin/zsh
/usr/local/bin/rzsh
普通にこんな風に書いてました。
#!/bin/bash
わ~、やってもた。
しかもさくらの標準シェルってbashじゃないし...。
echo $SHELL
/bin/csh
ひぇ~。なんか違うなあとは薄々感じていたのですが。(笑
さらにシェルスクリプト(*.sh)の改行コードを変更しないまま、
Windows標準の(CR+LF)で
アップしていたのでまったく動作しなかっりと
気づく迄散々時間がかかりました。
今日の今日迄、アスキーコードで転送なんて全然意識してなかったです。
○| ̄|_
VMPlayer上のサーバーでスクリプトをテストする際には、必ず変更しているのですが、
油断していると、Windows上でソースをいじっている内に改行コードがwindows標準の(CR+LF)にうっかり
戻ってしまいます。
Windows上でffftpとか使ってアップロードしている場合は、
保存するスクリプトの改行コードをあらかじめUnix標準の「LF」へ変更しておくか、
ffftpの[オプション]-[環境設定]から
[転送1]タブをクリック
ファイル名で切替え(デフォルト)を選択
アスキーモードのファイル名に
アップするスクリプトの拡張子(例えば*.sh)を登録しておくと確実です。
気づくのに2日かかりました。○| ̄|_
シェル上で直接実行すると問題なく実行するのに
cron上でシェルスクリプトを実行すると、
: not found
とか
No such file or directory
といった、"postmaster"宛エラーメールが返ってくる場合は、
アスキーモード転送(改行コード)が適切かどうか確認してみましょう。
ちなみにさくらインターネットでcronを使う際のデフォルトの作業ディレクトリは、
/home/user/
(userの部分はご利用のアカウント名)
デス。
cronでシェルスクリプトを廻す際は、
あらかじめ作業ディレクトリを「cd」コマンドを使って、
スクリプトを配置しているディレクトリに
移動する記述をしておくとソース上の相対パスコードも実行できます。
crontabに長~いパスを記述するより、
シェルスクリプトファイルをcronで呼び出して、
必要なcgiを順次シェルスクリプト上で実行しておく方が
便利で使いやすいですよね。
ちなみに当ブログ、火星ネタを中心に
メインサイトである「Mars de Subetta++」の宣伝を
目的に展開しているのですが、
火星ネタでの検索エンジンからの訪問者、限りなくゼロです。
検索エンジン経由によるアクセスって、数本しかないPCネタの記事だったり。
○| ̄|_
宣伝になってないなあ。(w
では、また。