質問編集履歴

4

2017/11/28 12:58

投稿

s_ayana
s_ayana

スコア35

test CHANGED
File without changes
test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  sendmail.sh
24
24
 
25
- #! /bin/sh
25
+ #!/bin/sh
26
26
 
27
27
 
28
28
 

3

2017/11/28 12:58

投稿

s_ayana
s_ayana

スコア35

test CHANGED
File without changes
test CHANGED
@@ -1,10 +1,8 @@
1
- ###
2
-
3
- メールをした日ちの3日前に送れるようなアルゴリズムを教えて欲しいです。
1
+ お知らせメールを定期的に3日前に送れるようなアルゴリズムを教えて欲しいです。
4
2
 
5
3
 
6
4
 
7
- 例えばMYSQLにある12月1日に完成させなくてはならないけど3日前になっても完成しないとメールを送信するプログラムをshellで書きたいです。
5
+ 例えばMYSQLにある12月1日に完成させなくてはならないマスタを3日前になっても完成しないとメールを自動送信するプログラムをshellで書きたいです。
8
6
 
9
7
  ちなみに何日前のプログラムはprofileを読み込んで実行したいです。
10
8
 
@@ -22,21 +20,17 @@
22
20
 
23
21
 
24
22
 
23
+ sendmail.sh
24
+
25
25
  #! /bin/sh
26
26
 
27
-
28
27
 
29
- # dateコマンドで前日の日付を取得し、集計開始/終了日時を設定
30
28
 
31
- sum_date=`date -d "-1 days" +%Y-%m-%d`
29
+ sum_date=`date -d "-3 days" +%Y-%m-%d`
32
30
 
33
31
  sum_date_from="$sum_date 00:00:00"
34
32
 
35
- sum_date_to="$sum_date 23:59:59"
33
+ sum_date_to="$sum_date
36
-
37
-
38
-
39
- # dirnameとlsで同一ディレクトリから拡張子がsqlのファイル一覧を取得し繰り返し
40
34
 
41
35
  dir=`dirname $0`
42
36
 
@@ -44,15 +38,15 @@
44
38
 
45
39
  do
46
40
 
47
- # catでファイルの中身を読み込み、sedで"SUM_DATE_FROM"、"SUM_DATE_TO"という文字列を上記で設定したものに置換
41
+
48
42
 
49
43
  sql=`cat $sql_file | sed -e "s/SUM_DATE_FROM/$sum_date_from/" | sed -e "s/SUM_DATE_TO/$sum_date_to/"`
50
44
 
51
- # mysqlコマンドで実行 エラー出力は 2>/dev/nullで捨てちゃいます
45
+
52
46
 
53
47
  result=`mysql -h mysql_host -u mysql_user -pmysql_password -D database_name --default-character-set utf8 -e"$sql" 2>/dev/null`
54
48
 
55
- # クエリの結果を改行してアペンド
49
+
56
50
 
57
51
  content="$content\n\n$result"
58
52
 
@@ -60,6 +54,4 @@
60
54
 
61
55
 
62
56
 
63
- # echo -eで改行を有効にし、mailコマンドでメール送信
64
-
65
57
  echo -e "$content" | mail -s "Subject $sum_date" "hoge@hoge.com"

2

2017/11/28 12:57

投稿

s_ayana
s_ayana

スコア35

test CHANGED
File without changes
test CHANGED
@@ -11,8 +11,6 @@
11
11
 
12
12
 
13
13
  ちなみにshellはcentos6.4です。
14
-
15
- それとcronなど試してもうまくいかなかったです。
16
14
 
17
15
 
18
16
 

1

2017/11/28 11:14

投稿

s_ayana
s_ayana

スコア35

test CHANGED
File without changes
test CHANGED
@@ -17,3 +17,51 @@
17
17
 
18
18
 
19
19
  大変分かりづらいと思うのですが、分かる方ご回答お願いします。
20
+
21
+
22
+
23
+ 書いたshell script
24
+
25
+
26
+
27
+ #! /bin/sh
28
+
29
+
30
+
31
+ # dateコマンドで前日の日付を取得し、集計開始/終了日時を設定
32
+
33
+ sum_date=`date -d "-1 days" +%Y-%m-%d`
34
+
35
+ sum_date_from="$sum_date 00:00:00"
36
+
37
+ sum_date_to="$sum_date 23:59:59"
38
+
39
+
40
+
41
+ # dirnameとlsで同一ディレクトリから拡張子がsqlのファイル一覧を取得し繰り返し
42
+
43
+ dir=`dirname $0`
44
+
45
+ for sql_file in `ls $dir/*.sql`
46
+
47
+ do
48
+
49
+ # catでファイルの中身を読み込み、sedで"SUM_DATE_FROM"、"SUM_DATE_TO"という文字列を上記で設定したものに置換
50
+
51
+ sql=`cat $sql_file | sed -e "s/SUM_DATE_FROM/$sum_date_from/" | sed -e "s/SUM_DATE_TO/$sum_date_to/"`
52
+
53
+ # mysqlコマンドで実行 エラー出力は 2>/dev/nullで捨てちゃいます
54
+
55
+ result=`mysql -h mysql_host -u mysql_user -pmysql_password -D database_name --default-character-set utf8 -e"$sql" 2>/dev/null`
56
+
57
+ # クエリの結果を改行してアペンド
58
+
59
+ content="$content\n\n$result"
60
+
61
+ done
62
+
63
+
64
+
65
+ # echo -eで改行を有効にし、mailコマンドでメール送信
66
+
67
+ echo -e "$content" | mail -s "Subject $sum_date" "hoge@hoge.com"