检查目录中若出现文件,则发邮件提醒

客户端:client.c -- 检测目录是否为空,当有文件时把文件名发给server端 

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <dirent.h>
#include <time.h>

#define HISPORT 10010

struct packet {
	char data[1024000];
};

int send_to_169(struct packet pkt) {
	int sd,ret;
	struct sockaddr_in his_end;

	sd=socket(PF_INET,SOCK_STREAM,0);
	if(sd==-1) {
		fprintf(stderr,"socket error.\n");
		return -1;
	}

	his_end.sin_family=AF_INET;
	his_end.sin_port=htons(HISPORT);
	his_end.sin_addr.s_addr=inet_addr("10.199.75.169");

	ret=connect(sd,(struct sockaddr *)&his_end,sizeof(his_end));
	if(ret==-1) {
		perror("connect()");
		return -1;
	}

	ret=write(sd,&pkt,strlen(pkt.data));
	if(ret==-1) {
		fprintf(stderr,"write() error.\n");
		return -1;
	}
	printf("client write %d bytes.\n",ret);

	ret=close(sd);
	if(ret==-1) {
		fprintf(stderr,"close(sd) error.\n");
		return -1;
	}

	return 0;
}

int main(void) {
	int ret,mark;
	struct packet pkt;

	int i;
	char *file_path[2]={"/video2/ftpdata/uploads","/video2/ftpdata/downloads"};

	DIR *dp;
	struct dirent *dir;

	time_t timep;
	struct tm *tp;
	char nowtime[128];

	timep=time(NULL);
	tp=localtime(&timep);
	sprintf(nowtime,"%d-%02d-%02d-%02d-%02d-%02d",1900+tp->tm_year,(1+tp->tm_mon),tp->tm_mday,tp->tm_hour,tp->tm_min,tp->tm_sec);

	//start---
	for(i=0;i<2;i++) {
		dp=opendir(file_path[i]);
		if(dp==NULL) {
			fprintf(stderr,"opendir() error.\n");
			exit(-1);
		}

		mark=0;
		while((dir=readdir(dp))!=NULL) {
			if(dir->d_type==DT_REG)
				if(!mark++) {
					strcat(pkt.data,file_path[i]);
					strcat(pkt.data,"\n");
					strcat(pkt.data,dir->d_name);
					strcat(pkt.data,"\n");
				} else  {
					strcat(pkt.data,dir->d_name);
					strcat(pkt.data,"\n");
				}
		}

		ret=closedir(dp);
		if(ret==-1) {
			fprintf(stderr,"closedir() error.\n");
			exit(-1);
		}
	}
	//end---

	//      printf("mark=%d,%s\n",mark,pkt.data);
	printf("%s\n",nowtime);
	printf("%s",pkt.data);
	printf("mark=%d\n",mark);

	if(mark) {
		ret=send_to_169(pkt);
		if(ret==-1) {
			fprintf(stderr,"send_to_169() error.\n\n");
			exit(-1);
		}
	}

	printf("\n\n");

	exit(0);
}

 服务端:server.c -- 接收client端发来的信息,写到zipfile文件中,再调用my_mail.sh 脚本发邮件

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>

#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

#include <time.h>

#define MYPORT 10010
#define MYFILE "/home/uniadmin/mail/check_133_134_upload_zip_file/zipfile"
#define LOGFILE "/home/uniadmin/mail/check_133_134_upload_zip_file/logfile.log"

struct packet {
        char data[1024];
};

int main(void) {
        FILE *fp,*fp_log;
        int sd,newsd,ret;
        struct sockaddr_in my_end,his_end;
        int his_end_len;
        struct packet pkt;


        time_t timep;
        struct tm *tp;
        char nowtime[128];

        pid_t pid;
        int fd;

        pid=fork();
        if(pid==-1) {
                perror("fork()");
                exit(-1);
        }

        if(pid!=0) {
                exit(0);
        }

        fd=open("/dev/null",O_RDONLY);
        if(fd==-1) {
                perror("open()");
        } else {
                close(STDIN_FILENO);
                dup(fd);
                close(fd);
        }

        fd=open("/dev/null",O_WRONLY);
        if(fd==-1) {
                perror("open()");
        } else {
                close(STDOUT_FILENO);
                dup(fd);
                close(STDERR_FILENO);
                dup(fd);
        }

        setsid();

        chdir("/");

        sd=socket(PF_INET,SOCK_STREAM,0);
        if(sd==-1) {
                fprintf(stderr,"socket error.\n");
        //      fprintf(fp_log,"%s\n","socket error.");
                exit(-1);
        }

        my_end.sin_family=AF_INET;
        my_end.sin_port=htons(MYPORT);
        my_end.sin_addr.s_addr=inet_addr("0.0.0.0");
//      my_end.sin_addr.s_add=INADDR_ANY;

        ret=bind(sd,(struct sockaddr *)&my_end,sizeof(my_end));
        if(sd==-1) {
                fprintf(stderr,"socket error.\n");
                exit(-1);
        }

        ret=listen(sd,5);
        if(ret==-1) {
                fprintf(stderr,"listen error.\n");
                exit(-1);
        }

        his_end_len=sizeof(his_end);
        while(1) {
                newsd=accept(sd,(struct sockaddr *)&his_end,&his_end_len);
                if(newsd==-1) {
                        perror("accept()");
                        exit(-1);
                }

                ret=read(newsd,&pkt,sizeof(pkt));
                if(ret==-1) {
                        fprintf(stderr,"read error.\n");
                        exit(-1);
                }
                (pkt.data)[ret]='\0';

        //      printf("server read %d bytes.\n%s",ret,pkt.data);
                fp=fopen(MYFILE,"w");
                if(fp==NULL) {
                        fprintf(stderr,"fopen() error.\n");
                        exit(-1);
                }

                ret=fprintf(fp,"%s",pkt.data);
                if(ret==-1) {
                        fprintf(stderr,"fprintf() error.\n");
                        exit(-1);
                }

                ret=fclose(fp);
                if(ret==EOF) {
                        fprintf(stderr,"fclose() error.\n");
                        exit(-1);
                }

                system("/home/uniadmin/mail/check_133_134_upload_zip_file/zip_file_check.sh");

                // start log file
                fp_log=fopen(LOGFILE,"a+");
                if(fp_log==NULL) {
                        fprintf(stderr,"fopen() error.\n");
                        exit(-1);
                }

                timep=time(NULL);
                tp=localtime(&timep);
                sprintf(nowtime,"%d-%02d-%02d-%02d-%02d-%02d",1900+tp->tm_year,(1+tp->tm_mon),tp->tm_mday,tp->tm_hour,tp->tm_min,tp->tm_sec);

                fprintf(fp_log,"%s\n",nowtime);
                fprintf(fp_log,"%s\n",pkt.data);
                fprintf(fp_log,"%s\n\n\n","Ok!! mail send sucess...");

                fclose(fp_log);
                // end log file

                close(newsd);
        }

        close(sd);

        exit(0);
}

 服务端:my_mail.sh -- server调用该脚本发送邮件提醒

#!/bin/sh

DATE=`date +%Y-%m-%d-%H-%M-%S`

MY_PATH=/home/uniadmin/mail/check_133_134_upload_zip_file

FILE=zipfile

NEW_FILE=$FILE-$DATE

# my mail
my_mail() {
        if [ -e $MY_PATH/$FILE ] ; then
                /bin/mv $MY_PATH/$FILE $MY_PATH/$NEW_FILE

        #       LINE=`/bin/cat $MY_PATH/$NEW_FILE | /usr/bin/wc -l`

                NUM=$((`sed -n '1p' $MY_PATH/$NEW_FILE | /bin/sed 's/[^;]*//g' | /usr/bin/wc -c`-1))
                #echo `awk -F '' '{for(i=1;i<=NF;i++) if($i==";") a++} END{print a}' zipfile-2011-10-25-09-54-49`

                if grep 'zz-aq-4a-3' $MY_PATH/$NEW_FILE > /dev/null ; then
                        /bin/mail -s '4a-3 oracle log err...' -b chenhb55@chinaunicom.cn -c hq-yangqq@chinaunicom.cn send2@m165.com < $MY_PATH/$NEW_FILE
                elif grep 'zz-aq-4a-4' $MY_PATH/$NEW_FILE > /dev/null ; then
                        /bin/mail -s '4a-4 oracle log err...' -b chenhb55@chinaunicom.cn -c hq-yangqq@chinaunicom.cn send2@m165.com < $MY_PATH/$NEW_FILE
                elif grep hq-sunzhaobin $MY_PATH/$NEW_FILE > /dev/null ; then
                        MAIL_ADDR1=`/bin/awk -F';' '{print $1}' $MY_PATH/$NEW_FILE`
                        MAIL_ADDR2=`/bin/awk -F';' '{print $2}' $MY_PATH/$NEW_FILE`
                        SUBJECT=`/bin/awk -F',' '{print $2}' $MY_PATH/$NEW_FILE`
                        MAIL_CONTENT=`/bin/awk -F";" '{print $3}' $MY_PATH/$NEW_FILE`
                        echo $MAIL_CONTENT | /bin/mail -s "$SUBJECT" -b send2@m165.com -c $MAIL_ADDR1 $MAIL_ADDR2
                elif grep GSM $MY_PATH/$NEW_FILE > /dev/null ; then
                        MAIL_ADDR1=`/bin/awk -F';' '{print $1}' $MY_PATH/$NEW_FILE`
                        MAIL_ADDR2=`/bin/awk -F';' '{print $2}' $MY_PATH/$NEW_FILE`
                        SUBJECT=`/bin/awk -F',' '{print $2}' $MY_PATH/$NEW_FILE`
                        MAIL_CONTENT=`/bin/awk -F";" '{print $3}' $MY_PATH/$NEW_FILE`
                        echo $MAIL_CONTENT | /bin/mail -s "$SUBJECT" $MAIL_ADDR2

        #       elif [ $NUM -eq 2 ] && [ $LINE -eq 1 ] ; then
                elif [ $NUM -eq 2 ] ; then
                        MAIL_ADDR1=`/bin/awk -F';' '{if(NR==1) print $1}' $MY_PATH/$NEW_FILE`
                        MAIL_ADDR2=`/bin/awk -F';' '{if(NR==1) print $2}' $MY_PATH/$NEW_FILE`
                        SUBJECT=`/bin/awk -F';' '{if(NR==1) print $3}' $MY_PATH/$NEW_FILE`
                       # MAIL_CONTENT=`/bin/awk -F";" '{print $3}' $MY_PATH/$NEW_FILE`
                       ## MAIL_CONTENT=`/bin/awk '{if(NR>=2) print $0}' $MY_PATH/$NEW_FILE`
                       /bin/awk '{if(NR>=2) print $0}' $MY_PATH/$NEW_FILE > /home/uniadmin/mail/check_133_134_upload_zip_file/tmp_file
                        /bin/mail -s "$SUBJECT" -b send2@m165.com -c $MAIL_ADDR2 $MAIL_ADDR1  < /home/uniadmin/mail/check_133_134_upload_zip_file/tmp_file
                ##      /bin/cat /home/uniadmin/mail/check_133_134_upload_zip_file/tmp_file | /bin/mail -s "$SUBJECT" -c send2@m165.com -c $MAIL_ADDR2 $MAIL_ADDR1 
                ##      echo $MAIL_CONTENT | /bin/mail -s "$SUBJECT" -c send2@m165.com $MAIL_ADDR1
                elif grep '^.\+@.\+\..\+;' $MY_PATH/$NEW_FILE > /dev/null && [ $LINE -eq 1 ] ; then
                        MAIL_ADDR=`/bin/awk -F';' '{print $1}' $MY_PATH/$NEW_FILE`
                        MAIL_CONTENT=`/bin/awk -F"$MAIL_ADDR;" '{print $2}' $MY_PATH/$NEW_FILE`
                        echo $MAIL_CONTENT | /bin/mail -s 'my mail ...' $MAIL_ADDR
                else
                        /bin/mail -s 'Warn!!133 134 zip file...' -b chenhb55@chinaunicom.cn -c hq-yangqq@chinaunicom.cn send2@m165.com < $MY_PATH/$NEW_FILE
                fi
        fi
}

# 30 day ago delete file
delete_file() {
        find $MY_PATH -name 'zipfile*' -mtime +3 -exec rm {} \;
}

# execute
my_mail
delete_file

exit 0







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值