シェルスクリプトの中で、フォルダを圧縮するため
tar -cvzf ~
しています。このシェルをroot権限cronで毎日動かしたいのですが、試したところ、正常に圧縮されません。
名前だけは存在するのですが、ファイルサイズが20byteしかありません。
シェルスクリプトを手動で起動させた場合は正しく圧縮できます。圧縮されたファイルも1Gありました。

以前、どこかのMLにて同様の報告があり、root宛てのMailを確認するように、というアドバイスまでは乗っていたので、確認したところ、root宛てにメールが来ていませんでした。

対処方法をお教えください。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

zオプションがついているという事は、gzip圧縮込みですよね。



ファイルが生成されているという事は、tar自体は動いている可能性が高いと。

そうなると、私が思いつく可能性は2つです。

1.cronの実行時のサーチpathにgzipが無い。
2.OSが分からないので、微妙ですがBSD系のOSや、Solarisなどでは、システム標準のtarがgnu tarでは無い事が多いです。
従って、件の環境変数の絡みで、gnu tarよりも先にシステム標準のtarが呼び出されているため、zオプションが無効でうまく動いていない。

と、こんな風に推測しますが、どうでしょうか?

この回答への補足

回答ありがとうございます。
私、あせってOS書いてなかったですね。
OSはRedHat6.2J改訂版です。

which gzipにて/usr/binにある(そこからリンク張られていて実体は/binにありました)とのことでしたので、crontab -eにて
PATH=/sbin:/bin:/usr/sbin:/usr/bin
の一行を追加してみましたが、結果は同じでした。

また、selenityさんの助言に従い、tarのパスを絶対パス(/bin/tar)で書いてみましたが、結果は変わりませんでした。

手動の場合実行できて、cronからだと実行できない原因として、ファイルの所有者が関係あるのかな?と考えてみたりしています。
しかし、root権限で実行できて、rootで設定されたcronで実行できない、ということなんてあるのでしょうか?
ちなみに圧縮対象のファイルの所有者はrootではありません。

補足日時:2002/04/04 14:02
    • good
    • 0

シェルスクリプト内のtarの記述を


tar -cvzf ~ > log.txt 2>&1
のようにして、実行時のメッセージを拾って見ては如何でしょう。

何が起こっているのかの手がかりくらいは掴めるとおもいますけど。
    • good
    • 0

多分cronから実行される際の環境変数の不足が原因でしょう。


シェルスクリプト内の「tar ~」の記述で、tarコマンドをフルパスで記述すれば動きませんか?
    • good
    • 1

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qコマンド一覧を取得するには?

「実行可能なコマンド一覧を出力する」コマンドはありますでしょうか?

個人的には,「~wm」という文字列で終わるコマンドを調べたいのですが,そのためにコマンド一覧からgrepで検索しようと思いました.

よろしくお願いいたします.

Aベストアンサー

$PATHのなかから実行可能なものをリストするスクリプトです。
ちなみに私の場合wmで終わるものは、
/usr/bin/pbmtocmuwm
/usr/bin/gnome-wm
/usr/bin/dh_installwm
でした。
-- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< --
#! /bin/sh
echo $PATH |
awk -F: '
{
for (i = 1; i <= NF; i++) {
printf("find %s -type f -ls\n", $i);
}
}' | sh |
awk '
$3 ~ /x/ {
print $NF
}'

Qroot宛てに送ったメールのオーナーが代わってしまう。

root宛てにメールを送り、.forwardで処理し出力したファイルのオーナーがdeamonに代わってしまうのは、何が原因でしょうか?オーナーが代わらないように設定する方法を教えてください。また、/etc/mail/aliasesは何も設定してません。

.forwardの内容
"|/usr/local/bin/nkf -e > /tmp/test.mail"

ls -l /tmp/test.mail
-rw-r--r-- 1 daemon other 724 10月 15日 10:22 /tmp/test.mail

Aベストアンサー

/etc/mail/sendmail.cfで以下の部分を変更後、sedndmailを再起動することでdeamonでの実行を変える
事ができます。試してみて下さい。

# default UID (can be username or userid:groupid)
#O DefaultUser=mailnull
       ↓
# default UID (can be username or userid:groupid)
O DefaultUser=ほげほげ

QMS-DOSで使えるコマンド一覧を表示するコマンド

そのコマンドを入力すれば、MS-DOS内で使える
コマンド一覧が表示されるコマンドを知りたいのですが
どなたかご存知の方、いらっしゃいませんか?
UNIXで言うところのmanコマンドに当たるものです。

Aベストアンサー

Windowsカテゴリなので、MS-DOSのことじゃなくて、WindowsのDOSプロンプトとか、コマンドプロンプト内で使えるコマンドのことだと思います。

1) どんなコマンドが使えるか
Win9x,Me系: \windows\command のフォルダに主なコマンドがあります
Win2K,XP系: help で主なコマンドが出ます
どちらも管理系のコマンド等は別のところにあったりします。

unixでもmanコマンドでは「使えるコマンド一覧」はわかりません。網羅的に調べるには PATHにあるディレクトリをひとつずつ ls して調べるしかないです。Windowsでも同じで、PATHにあるディレクトリをひとつずつ調べるしかないのですが、GUIでしか使えないコマンドも混じっています。アイコンの絵がついているものはおおむねGUIですが、逆は真ではないので調べるのは難しいです。

上記の主なコマンド以外も含めたプロンプトで使えるコマンドを網羅的に知りたいなら書籍を見るのが早道でしょう。

2)unix の man 相当機能
上記主要コマンドについては、コマンド名 /? で使い方が出ますが、それ以外の管理系コマンドでは出ないことが多いです。Webか書籍で調べるしかないです。

Windowsカテゴリなので、MS-DOSのことじゃなくて、WindowsのDOSプロンプトとか、コマンドプロンプト内で使えるコマンドのことだと思います。

1) どんなコマンドが使えるか
Win9x,Me系: \windows\command のフォルダに主なコマンドがあります
Win2K,XP系: help で主なコマンドが出ます
どちらも管理系のコマンド等は別のところにあったりします。

unixでもmanコマンドでは「使えるコマンド一覧」はわかりません。網羅的に調べるには PATHにあるディレクトリをひとつずつ ls して調べるしかないです。Win...続きを読む

Qmailを受信するとシェルスクリプト起動

root宛てにメールが送信されると、/etc/groupファイルを更新するといった、シェルスクリプトを起動させる方法を教えてください。

Aベストアンサー

~root/.forward (sendmailの場合)
~root/.qmail (qmailの場合)

というファイル名で下記の内容を用意します。
実行する任意のファイル名を頭に「|」をつけます。
-----------------------------------
| /path/to/script
-----------------------------------

「/etc/groupファイルを更新」ということですが
どう更新したいのかが分かりませんので何とも言えませんが
恐らくセキュリティ上の問題もありますので、エラーチェックなどを
行う必要があると思います。
参考までにperlでやってみるとこうなります。

---------------------------------------------
#!/usr/bin/perl

while(<STDIN>){
if(/^passwd: (.*)/){$pass=$1;}
if(/^group: (.*)/){$group=$1;}
if(/^action: (.*)/){$action=$1;}
}

if($pass eq "mypass"){
system("group$action $group");
}
---------------------------------------------

できればヘッダーあたりでもうちょっと厳格なチェックを
行った方がいいですけどね。(^-^;

~root/.forward (sendmailの場合)
~root/.qmail (qmailの場合)

というファイル名で下記の内容を用意します。
実行する任意のファイル名を頭に「|」をつけます。
-----------------------------------
| /path/to/script
-----------------------------------

「/etc/groupファイルを更新」ということですが
どう更新したいのかが分かりませんので何とも言えませんが
恐らくセキュリティ上の問題もありますので、エラーチェックなどを
行う必要があると思います。
参考までにperlでやってみると...続きを読む

Qコマンドプロンプトを使ってネットワークの一覧を表示

コマンドプロンプトを使ってネットワークの一覧を表示する方法
LAN内のPCやプリンタ、ネットワーク機器のIPアドレスを
調べて一覧にするコマンドプロンプトのコマンドはありませんか?
固定IPかDHCPから割り振られたIPか、わかると更に嬉しいです。

なければそういった機能があるソフトでもいいので
ご紹介頂けると幸いです。

Aベストアンサー

こちら参考に
★lan内のpcをipアドレスで一覧表示したい | OKWave
http://oshiete.goo.ne.jp/qa/5829669.html

Qシェル??? スクリプト???

この業界で仕事していていつも首をかしげてしまうことなんですけど、、、

シェルスクリプトのことを単に『シェル』と呼ぶ人がとても多いのですが、この表現はなんだか気持ち悪くありませんか?

たとえば、『ちょっとシェル作って』なんて言いますけど、なんかシェル本体(/bin/shそのものとか)を作れといわれてるみたいで変な感じです。

これについて、みなさんどう思われますか?
また、なぜこういう言い方が一般化したのでしょうか?(自分の会社だけかと思ってたら、委託さんや協力会社などの同業他社の方も使っているので。。。)

くだらない質問ですがよろしくお願いします。

Aベストアンサー

メインフレーム文化の流れだと思います。プログラムに対してJCL(JobControlLanguage)がある。JCLって名前からわかるように言語なわけですが、それで記述された「プログラム実行のやりかたを記述したもの」もJCLと呼びます。unixではこのJCLがshにあたるわけで、shでかかれたものをシェルと呼ぶわけです。

JCLで書かれたものの方(shだとスクリプト)は、ほんとはジョブストリームかな?(自信なし。忘れちゃいました)

Qls コマンドで *.jpg と *.JPG の画像一覧を出したい

ls コマンドいっぱつで、
*.jpg または *.JPG の画像一覧を出したいのですが
どう引数を指定したらよいでしょうか..??

Aベストアンサー

ls *.[jJ][pP][gG]

でどうですか?

QLinux起動時にシェルスクリプトを走らせるには?

いつも参考にさせていただいてます。
私はRedHat7.0でLinuxを勉強中です。

現在、Linuxの起動時にシェルスクリプトを走らせようと思っているのですがうまくいきません。
まだ初心者で手順自体が違っているかもしれませんので、大まかで構いませんので手順を教えてください。

Aベストアンサー

こんにちは。

/etc/rc.d/rc.local
に走らせたいスクリプトを記述します。

それで起動項目にできました。
ちゃんと起動しているかどうかはプロセスやシスログを見てみてください。

Qコマンドプロンプトの操作一覧

コマンドプロンプトでできる操作一覧のようなサイト、もしくは書籍を探しています。

たとえば、ipconfig /renew でIPアドレス再取得 …など

今一番知りたいのは、回線速度が安定して通信できているかを
先日、業者さんがきて、PCでやってたのが知りたいのですが
こんごもいろいろ調べて行きたいので
わかりやすい一覧のサイトがあればと思います。
よろしくお願いいたします。

Aベストアンサー

業者さんがカッコよく仕事してる姿見てると
ホント、惚れますよね~~(笑)

んでまあ、つい最近の記事(これから追加されていく)なんですけど、
ネットワーク関係ならこのへん読むといいかもですね~。

で、IT Proなんですけど、ひじょーに為になるのでぜひブックマーク
しておいてください。毎日読んでると結構勉強になりますよ~~。


っちゅうわけで、以上な感じで。


*****************************************

ネットワーク・コマンド道場

目次

日経NETWORK

 ネットワーク技術者を目指す人なら,ぜひ身につけておきたい
コマンドの使い方を解説していきます。コマンドによって何ができ,
実行結果から何が読み取れるか,現場で役立つ実践的な知識
が身につきます。(2006年02月06日)

http://itpro.nikkeibp.co.jp/article/COLUMN/20060125/227900/

↑ネットワーク技術者を目指してなくても、読んだら面白い…
と思うよ。はい。


結果を読めなきゃ意味ないから、全部読んでね☆

業者さんがカッコよく仕事してる姿見てると
ホント、惚れますよね~~(笑)

んでまあ、つい最近の記事(これから追加されていく)なんですけど、
ネットワーク関係ならこのへん読むといいかもですね~。

で、IT Proなんですけど、ひじょーに為になるのでぜひブックマーク
しておいてください。毎日読んでると結構勉強になりますよ~~。


っちゅうわけで、以上な感じで。


*****************************************

ネットワーク・コマンド道場

目次

日経NETWORK

 ネットワーク...続きを読む

Qshのシェルスクリプトの演算方法について・・・

bashのシェルスクリプトについてもお聞きしたのですが、
その方法では演算ができない!ということになってしまいました・・・
こういうちょこっとしたところが違うのが嫌です・・・↓
bashの場合は
----------
bash$ a=1
bash$ a=$(( $a + 1 ))
bash$ echo $a
2
----------
となったのですが、shではエラーが出てしまいました・・・
また、shのスクリプトもbashのスクリプトもシェルスクリプトと呼ぶのでしょうか?

Aベストアンサー

sh には、シェルの機能として演算は含まれていません。
計算自体は、コマンド expr を使って、

sh$ a=1
sh$ expr $a + 1
2

のように行います。よって、質問文のコマンドのsh版は

sh$ a=1
sh$ a=`expr $a + 1`
sh$ echo $a
2

のようになります。
sh,cshなどでは、``(バッククォート)で囲んだ部分は、実行されその結果と置き換わるので、上記の2行目は a=2 と実行しているのと同じことになります。

sh,expr でどのようなコマンドが使えるのかは、

sh$ man sh
sh$ man expr
として調べてください。

------------------------------------------------------------
>また、shのスクリプトもbashのスクリプトもシェルスクリプトと呼ぶのでしょうか?

呼びます。


人気Q&Aランキング

おすすめ情報