/********************************************************************************/
/* */
/* 著作権は放棄しません、自由に使用・改造・再配布可能です。 */
/* 改造版を再配布する際は、必ずファイル名を変更して、オリジナルを添付して */
/* 配布してください。 */
/* */
/* プログラム名 : 定期日付時間指定でプログラムをForkする */
/* 別のshスクリプトファイルでFTPファイル転送 */
/* ファイル名 : stimer.c */
/* 概要 : 自動で年月日時間 毎日/毎週 時間指定で */
/* パラメータ指定したプログラムを実行する。 */
/* */
/* 作成者 : S.Hata */
/* */
/* 適応装置 : FreeBSD & Linuxサーバ */
/* */
/* 変更履歴 : Make 2000/12/10 */
/* Ver Date 履歴(History) 氏名(Name) */
/* ---- -------- -------------------------------- ----------------- */
/* 0.1 00/12/12 新規作成 S.Hata */
/* 0.2 00/12/14 機能追加 毎時/毎週 S.Hata */
/* */
/********************************************************************************/
#include <stdio.h>
#include <time.h>
main(int argc, char *argv[])
{
int weeki;
int yeari,moni,mdayi;
int houi,mini,seci;
/********************************************************************************/
/* */
/* 処理 :パラメータのチェックと各種表示と説明 */
/* -o は年月日時分秒指定で1回のみ実効される */
/* -d は時分秒指定で毎日 指定時間に1回のみ実効される */
/* -w は時分秒指定で毎週 指定時間に1回のみ実効される */
/* */
/********************************************************************************/
if (( argc == 1 ) || ( argc < 6)) {
usage();
}
if (( argc == 2 ) && ( argv[1][0] == '-' ) && ( argv[1][1] == '?' )){
usage();
}
/********************************************************************************/
/* */
/* 処理 :パラメータはオプション -o のチェックと月日時分秒の範囲チェック */
/* -o は年月日時分秒指定で1回のみ実効される */
/* */
/********************************************************************************/
if (( argc == 9 ) && ( argv[1][0] =='-' ) &&
( argv[1][1] == 'o' || argv[1][1] =='O')){
/* fprintf( stdout, "No't loop day parameter \n");
fprintf(stdout,"%s \n",argv[1]);
fprintf(stdout,"%s \n",argv[2]);
fprintf(stdout,"%s \n",argv[3]);
fprintf(stdout,"%s \n",argv[4]);
fprintf(stdout,"%s \n",argv[5]);
fprintf(stdout,"%s \n",argv[6]);
fprintf(stdout,"%s \n",argv[7]);
fprintf(stdout,"%s \n",argv[8]);
*/
yeari = atoi(argv[2]);
moni = atoi(argv[3]);
mdayi = atoi(argv[4]);
houi = atoi(argv[5]);
mini = atoi(argv[6]);
seci = atoi(argv[7]);
if ((moni == 0 ) || (moni > 12 )){
fprintf(stdout,"\7err: month no't val\n");
exit(0);
}
if ((mdayi == 0 ) || (mdayi > 31 )){
fprintf(stdout,"\7err: day no't val\n");
exit(0);
}
if ( houi > 23 ){
fprintf(stdout,"\7err: hour no't val\n");
exit(0);
}
if (( mini > 59 ) || ( seci >59 )){
fprintf(stdout,"\7err: min & sec no't val\n");
exit(0);
}
for (;;){
time_t t = time(NULL);
struct tm *tp = localtime(&t);
char *s = asctime(tp);
/*
fprintf(stdout,"%04d/%02d/%02d %02d:%02d:%02d \n", 1900+tp->tm_year,1+tp->
tm_mon, tp->tm_mday, tp->tm_hour, tp->tm_min, tp->tm_sec);
*/
if (( yeari == 1900+tp->tm_year) && ( moni == 1+tp->tm_mon)
&& (mdayi == tp->tm_mday ) && (houi == tp->tm_hour)
&& ( mini == tp->tm_min) && ( seci == tp->tm_sec)){
execlp( argv[8], argv[8], NULL);
exit(0);
}
/********************************************************************************/
/* もっと クリティカル な時間にしたい人は以下usleep()とsleep(1)を置き換えてください */
/* 100/1000秒眠って待つ 100msec usleep(100) */
/* usleep(1000 * 1000); */
/* */
/********************************************************************************/
sleep(1);
}
}
/********************************************************************************/
/* */
/* 処理 :パラメータはオプション -d のチェックと時分秒の範囲チェック */
/* -d は時分秒指定で毎日 指定時間に1回のみ実効され終了するKillシグナルで停止 */
/* */
/********************************************************************************/
if(( argc == 6 ) && ( argv[1][0] =='-' ) &&
( argv[1][1] == 'd' || argv[1][1] == 'D')){
fprintf(stdout,"%s ",argv[1]);
fprintf(stdout,"%s:",argv[2]);
fprintf(stdout,"%s:",argv[3]);
fprintf(stdout,"%s ",argv[4]);
fprintf(stdout,"%s \n",argv[5]);
houi = atoi(argv[2]);
mini = atoi(argv[3]);
seci = atoi(argv[4]);
if ( houi > 23 ){
fprintf(stdout,"\7err: hour no't val\n");
exit(0);
}
if (( mini > 59 ) || ( seci >59 )){
fprintf(stdout,"\7err: min & sec no't val\n");
exit(0);
}
for (;;){
time_t t = time(NULL);
struct tm *tp = localtime(&t);
/* char *s = asctime(tp); */
fprintf(stdout,"%02d:%02d:%02d \n", tp->tm_hour,
tp->tm_min, tp->tm_sec);
if ((houi == tp->tm_hour) && ( mini == tp->tm_min) &&
( seci == tp->tm_sec)){
system( argv[5] );
}
/********************************************************************************/
/* もっと クリティカル な時間にしたい人は以下usleep()とsleep(1)を置き換えてください */
/* 100/1000秒眠って待つ 100msec usleep(100) */
/* usleep(1000 * 1000); */
/* */
/********************************************************************************/
sleep(1);
}
}
/********************************************************************************/
/* */
/* 処理 :パラメータはオプション -w 1,2,3,4,5,6,7 のチェックと時分秒の範囲チェック */
/* 対応順は1,2,3,4,5,6,7 日月火水木金土 */
/* -w は時分秒指定で毎週 指定時間に1回のみ実効され終了Killシグナルで終了する */
/* */
/********************************************************************************/
if (( argc == 7 ) && ( argv[1][0] =='-' ) &&
( argv[1][1] == 'w' || argv[1][1] =='W')){
fprintf(stdout,"%s ",argv[1]);
fprintf(stdout,"%s ",argv[2]);
fprintf(stdout,"%s:",argv[3]);
fprintf(stdout,"%s:",argv[4]);
fprintf(stdout,"%s ",argv[5]);
fprintf(stdout,"%s \n",argv[6]);
weeki = atoi(argv[2]);
houi = atoi(argv[3]);
mini = atoi(argv[4]);
seci = atoi(argv[5]);
if ( houi > 23 ){
fprintf(stdout,"\7err: hour no't val\n");
exit(0);
}
if (( mini > 59 ) || ( seci >59 )){
fprintf(stdout,"\7err: min & sec no't val\n");
exit(0);
}
if (( weeki <0 ) || ( weeki>8 )){
fprintf(stdout,"\7err: week-day no't val 1,2 3,4,5,6,7 \n");
exit(0);
}
for (;;){
time_t t = time(NULL);
struct tm *tp = localtime(&t);
/* char *s = asctime(tp);
fprintf(stdout,"%02d:%02d:%02d \n", tp->tm_hour, tp->tm_min, tp->tm_sec); */
if ((houi == tp->tm_hour) && ( mini == tp->tm_min)
&& ( seci == tp->tm_sec)){
system( argv[6] );
}
/********************************************************************************/
/* もっと クリティカル な時間にしたい人は以下usleep()とsleep(1)を置き換えてください */
/* 100/1000秒眠って待つ 100msec usleep(100) */
/* usleep(1000 * 1000); */
/* */
/********************************************************************************/
sleep(1);
}
}
}
usage()
{
fprintf(stdout,"\7Usage : stimer -o yyyy mm day hour min sec
fork-program\n");
fprintf(stdout," : -d hour min sec fork-program\n");
fprintf(stdout," : -w (1-7) hour min sec fork-program\n");
fprintf(stdout," : -w 1=Sunday - W 7=Satuday hour min sec
fork-program\n");
exit(0);
}
/* end of program eof */
|