今、DBのバックアップにCrontabでシェルを流してやっているんですが、
今度から、休日(祝祭日)と平日を分けて別々のシェルを流そうとしています。

自分の中で、単純にどこかに休日テーブルを持ってそのテーブルに記載されて
いる日にちと今日の日付を比較して~みたいな感じで考えているんですが、
このようなことは実際に可能でしょうか?(cシェルで)

またどのように組めば宜しいでしょうか?

漠然な質問内容ですが、宜しくお願いいたします。

A 回答 (1件)

工夫次第でいくらでもできると思います。


dateコマンドのオプションやテキスト処理コマンドによって違いがあるとは思いますけれど、例えば

set HOLIDAYDB = holiday_db_file
set TODAY = `date +'%m%d'`
set RECORD = `awk '/$TODAY/ {print}' $HOLIDAYDB`
if ( $#RECORD > 0 )
source ShForHoliday
else
source ShForWorkday
endif
    • good
    • 0

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

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

Qシェルの中から他のシェルを呼び出す

例えば、ひとつのシェルファイル( aaa.sh )の中に、
-------------------------
#!/usr/bin/csh
set HOME=/home/test/tmp
bbb.sh
-------------------------
と記述した場合、bbb.shで変数$HOMEを使いたいと思いましたが、
使えないようです。(HOME: 未定義の変数と表示されます)
どなたか、これ以外の方法で、このように
シェルからほかのシェルを呼び出して、変数も引き継がれるような方法ご存知ないでしょうか?
多分こーやれば、こうなるかも!みたいなご回答でも結構ですので情報提供をお願いします。

どうぞ宜しくお願い致します。

Aベストアンサー

たぶん環境変数は引き継がれます。
setenvを使えばいいように思います?

QHP-UX11.11のcrontabについて

crontab -eで編集しようと思うのですが、
下記のようなエラーが出て編集できません。
対処方法をお願いいたします。

"Could not connect to ToolTalk service: TT_ERR_PROCID 渡されたプロセス ID は有効ではありません。"

Aベストアンサー

ToolTalk って,GUIツール集かなんかでしょうか?
環境変数 EDITOR がToolTalk のコマンドに設定されてませんか?

環境変数 EDITOR を vi に設定してみてください.

Qcrontabでsql/plusの起動

シェルスクリプトでsql/plusを呼び出し、ストアドプロシジャを
実行しようとしているのですが、crontabを使ったスケジュール起動を
行おうとすると、以下のようなエラーになってしまいます。

Message file sp1<lang>.msb not found
Error 6 initializing SQL*Plus

not foundと言われているファイルに心当たりがありません。
sql/plusがバックグラウンドで使っているファイルなのでしょうか?
ちなみに、crontabを使わずに、コマンドラインから
このシェルスクリプトを実行すると、正常に動作します。

UNIXもシェルスクリプトも超初心者です。
ご存知の方おられましたら、ご教授願います。

OSはRedHat6.2J、Oracle8.1.7です。

Aベストアンサー

白黒ならず、黒白です。
多分ですが、以下のような環境変数を設定することで、
解決できるかと思われます。
(あくまでも参考にして下さい)
miya777さんの言われるように、cronでは環境変数といわれるものが
ひきつぎされないため、シェルの中で再度設定する必要があります。

setenv ORACLE_BASE /xxxx/oracle
setenv ORACLE_HOME $ORACLE_BASE/product/8.1.5
setenv ORACLE_SID xxxxx
setenv NLS_LANG Japanese_Japan.JA16EUC
setenv ORA_NLS33 $ORACLE_HOME/xxxxx/...
setenv LD_LIBRARY_PATH $ORACLE_HOME/lib

set path=( . /usr/bin /sbin /usr/sbin /usr/ccs/bin /opt/bin /opt/local/bin /usr/ucb /xxxx/.../oracle/product/8.1.5/bin $path )

ちなみに、envコマンドにて上記のsetenvコマンドの内容は
参照できるかと思います。

結構、cronで起動する場合は、注意していないと環境変数
については忘れがちになる部分です。

この回答でうまくいけばと思います。

でわ

白黒ならず、黒白です。
多分ですが、以下のような環境変数を設定することで、
解決できるかと思われます。
(あくまでも参考にして下さい)
miya777さんの言われるように、cronでは環境変数といわれるものが
ひきつぎされないため、シェルの中で再度設定する必要があります。

setenv ORACLE_BASE /xxxx/oracle
setenv ORACLE_HOME $ORACLE_BASE/product/8.1.5
setenv ORACLE_SID xxxxx
setenv NLS_LANG Japanese_Japan.JA16EUC
setenv ORA_N...続きを読む

Qfml の crontab の設定でこれはなんでしょう?

FreeBSD で、fml を運用しています。
見てみると crontab に以下のように設定されているの
ですが、

4 * * * * /home/public_html/fml/msend.pl /home/ml/testml -q

この、/msend.pl ~ の後に続くパスの設定はなにを
しているのでしょうか?
単純に、*.pl を定期的に動作させるには、

4 * * * * /home/public_html/fml/msend.pl

で終わっていいような気がするのですが、しかも
-q って何のオプションなのかも謎です。

ご存知の方がいましたら、よろしくお願いします。m(__)m

Aベストアンサー

> この、/msend.pl ~ の後に続くパスの設定はなにをしているのでしょうか?

ふたつとも、msend.pl に与えるパラメータです。

多分、ひとつめの /home/ml/testml は、(送るはずの)メールをためてある
ディレクトリ。

ふたつめの -q は、quiet mode (なるべくメッセージを出さないで動作する)
の指定です。

fml は、使ったことが無いので、パラメータの意味を調べるのに、参考URLの
ページを参考にしました。

参考URL:http://www.sapporo.iij.ad.jp/staff/fukachan/fml/Japanese/digest/2.html

Qcrontab -e で作成したファイルはどこに?等

crontab -e で、viである時間で自動で毎日処理するのコマンドを書きました。
viの:w(上書き保存)で書いたファイルを保存しました。
そのファイル名はcrontab.1508(tmp/crontab.1508)と勝手になっていましたが、
find / -name crontab* をしても出てきませんでした。
確かに、viで:wした時にこの名前で上書き保存されたとおもうのですが・・・。
crontab -lで設定したファイルを確認すると、viで書いたものが出てきますので、ど
こかに保存されていると思います。
質問ですが、(1)crontab -e で作成したファイルはどこにいってしまったのでしょうか。
(2)/etcに、/etc/cron.daily、/etc/cron.monthly、/etc/cron.weekly、/etc/cron.d
/etc/cron.hourly、とありますが、これらはcrontab -eで作成したファイルと関係あるのでしょうか。
(3)別のマシンにこれらの/etcをコピーすれば同じ処理ができるのでしょうか。
(4)crontabの処理を追加していくには、crontab -e でviを起動し、追加していけばそれでよいのでしょうか。
(5)処理したいファイルを書き、crontab ファイル名 という方法もあるようですが、
この書いたファイルは/etc以下に置いても良いのでしょうか。
(一般的に、/etcはバックアップを取っておく様なので…)

教えてください。おねがいします。

crontab -e で、viである時間で自動で毎日処理するのコマンドを書きました。
viの:w(上書き保存)で書いたファイルを保存しました。
そのファイル名はcrontab.1508(tmp/crontab.1508)と勝手になっていましたが、
find / -name crontab* をしても出てきませんでした。
確かに、viで:wした時にこの名前で上書き保存されたとおもうのですが・・・。
crontab -lで設定したファイルを確認すると、viで書いたものが出てきますので、ど
こかに保存されていると思います。
質問ですが、(1)crontab -e で作成した...続きを読む

Aベストアンサー

どうも遅くなりました。
新たなご質問があったとは気づかなくて。

> */15 7-21 * * * printf '\0007' 

ああ、それじゃ鳴らないですね。すいません、
説明不足で。これだと、7番のキャラクタの
出力先である、printfの標準出力が、
ターミナルに接続されてません。これだと、
printfの標準出力はcronデーモンに接続
されてるんで、cronは、「printfが何か
言ってきたぞ」と思って、root宛にメールを
よこしてきたでしょう。

アスキーコード7番をビープとして解釈する、
というのはターミナルの機能なんで、
printfの出力をいずれかのターミナル
(kterm、rxvtなど)のデバイスファイル
(ktermなどは、/dev/ttyp0, /dev/ttyp1など)
にリダイレクトしないといけません。

しかし、ktermなどのXターミナルは常に立ち上がっている
訳ではありませんので、コンソール(/dev/console)に
リダイレクトするんでしょうね。

ですから、

> */15 7-21 * * * printf '\0007' > /dev/console

で鳴ると思います。

前回の回答を書いた後に思いついたんですが、
音楽ファイルを鳴らす方がわかりやすいんでは?
WindowsのC:\windows\mediaの中や、
(GNOMEやKDEがインストールされていれば)
/usr/share/soundsに、wavファイルが
いっぱい入ってるんで、そのうちの時報っぽいやつを
選んで、

> */15 7-21 * * * play jihou.wav

というのはどうでしょう?当然、内部スピーカ内臓の
サウンドボードでない限り、外部スピーカの電源を
常時ONにしないとだめですが。

どうも遅くなりました。
新たなご質問があったとは気づかなくて。

> */15 7-21 * * * printf '\0007' 

ああ、それじゃ鳴らないですね。すいません、
説明不足で。これだと、7番のキャラクタの
出力先である、printfの標準出力が、
ターミナルに接続されてません。これだと、
printfの標準出力はcronデーモンに接続
されてるんで、cronは、「printfが何か
言ってきたぞ」と思って、root宛にメールを
よこしてきたでしょう。

アスキーコード7番をビープとして解釈する、
というのはターミナルの...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報