ubuntu16 + crontab定时发送邮件

背景:写一个小工具,定时统计一些信息,并将统计结果发送给相关人员

方案:代码部署到ubuntu上;采用crontab设置定时任务去执行程序,获取需要统计的信息,并将结果写到excel中,然后通过mail 将邮件发送出去。

 

源代码

1、准备好统计信息,并将结果写到excel中的代码

2、打成jar包,用来上传到服务器中运行

这里的代码就不做说明的,很简单。我是采用maven管理jar包的,自然就使用了mvn命令打jar包

 

ubuntu上部署代码

要想代码在服务器中运行,肯定的有jdk环境,所以在代码上传之前,先把服务器上相关环境配置好

1、安装配置jdk

  • 执行命令:apt-get install openjdk-8-jdk 还自动将jdk下载到 系统/usr/lib/jvm 路径下;
  • 执行命令: vi /ect/profile ,打开profile文件,在文件末尾添加上环境变量的配置
#set Java environment
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

配置完之后,保存退出,cat /ect/profile ,看一下添加的内容是否添加成功;

  • 执行命令:source /ect/profile , 让文件生效,因为有些配置文件修改完之后,并不是立即就能生效的。

做完这些之后,执行命令:java -version ,若能正常显示jdk版本,说明前面的配置成功了。

 

2、部署代码

进入到想要放置项目代码的目录下,再创建一个目录,使用ftp,将我项目的jar包传到该目录下;

执行命令: jar -xvf xxx.jar ,解压项目代码到当前路径下

准备执行代码的脚本,脚本放置的目录前往要注意;如下,我的项目根目录是bugProject,要执行的代码是bugProject\com下的Test , 项目所依赖的jar包都放在bugProject\lib目录下;

我的执行脚本就放在了bugProject下,和com,lib是同级的 。这里的路径一定要注意,不然后面执行脚本的时候,会报各种错误(比如:找不到或无法加载主类等)。

#Java程序所在的目录(classes的上一级目录)
APP_HOME=/home/ada/bugProject
 
#需要启动的Java主程序(main方法类)
APP_MAINCLASS=com/Test
 
echo $APP_MAINCLASS
#拼凑完整的classpath参数,包括指定lib目录下所有的jar
CLASSPATH=$APP_HOME
for i in "$APP_HOME"/lib/*.jar; do
   CLASSPATH="$CLASSPATH":"$i"
done

echo $CLASSPATH

java -classpath $CLASSPATH $APP_MAINCLASS

ubuntu16 + crontab定时发送邮件_第1张图片

执行代码的脚本准备好之后,执行脚本,看看程序是否正常运行了。若未能正常运行,就得一一排查问题了。

3、安装mailutils(ubuntu系统)

使用mail命令来发送邮件,得先按钮mailutils

  • 安装命令:sudo apt-get install mailutils

安装成功后,就可以通过以下命令发送邮件了([email protected]就是收件人邮箱)。

echo '这里是邮件内容.' | mail -s "这里是邮件主题" [email protected]

注意:若是想使用外部smtp发送网络邮件,还需要安装heirloom-mailx

  • 安装命令:sudo apt-get install heirloom-mailx
  • 安装成功后,配置/etc/s-nail.rc文件,在该文件末尾添加配置如下;

#设置发送邮箱
set [email protected]
#设置smtp服务器和端口
set smtp=smtp.163.com:25
#设置用户名,记得加域名啊
set [email protected]
#授权码
set smtp-auth-password=xxxxxx4444
#认证方式
set smtp-auth=login

配置完后执行以下source命令,让该文件的修改立即生效。这个时候收到邮件后,就会发现发件人不一样了。

  • 带附件/发送多人

执行命令:echo "这里输入你邮件内容" | mail -s "邮件标题" -a 附件的路径 [email protected],[email protected]

就可以携带附件将邮件发送给多人

  • 在文件中设置邮件内容

执行命令:mail -s "邮件标题" -a 附件的路径 [email protected],[email protected] < mailMessage.txt

 

至此发送邮件的问题解决了

 

4、设置定时任务

cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。

由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:

/sbin/service cron start //启动服务
/sbin/service cron stop //关闭服务

/sbin/service cron restart //重启服务
/sbin/service cron reload //重新载入配置

cron常用命令

重启cron:/etc/init.d/cron restart
查看cron:crontab -l
查看cron的状态(开启或关闭):service cron status
打开cron文件:crontab -e
查看cron日志:/var/log/syslog

crontab时间格式说明

minute(分):可以设置0-59分
hour(小时):可以设置0-23小时
day of month(日期):可以设置1-31号
month(月份):可以设置1-12月
day of week(星期):可以设置0-7星期几,其中0和7都代表星期天,也可以使用名称来表示星期天到星期一,例如sun表示星期天,mon表示星期一
#时间格式不正确的时候,在退出crontab编辑时会有提示;例如01 24 * * * 这种就是错误的,因为不存在24点01分这样的时间

cron语法

"*"代表取值范围内的数字
"/"代表"每"
"-"代表从某个数字到某个数字
","分开几个离散的数字

 

  • 安装命令: apt-get install cron
  • 打开cron文件命令:crontab -e
  • 选择编辑器,输入编辑器前面的数字就可以了,这里选择之后,后面再使用命令crontab -e编辑就不再需要选择了;

nano编辑器使用规则:

ctrl +0 : 保存

回车

ctrl + x : 退出

选择vi编辑器,就和平时的vi编辑操作一样

编写定时命令: 59 23 * * 0 date

若是定时执行脚本,则:59 23 * * 0 bash /root/crontabTimer/timer.sh

保存退出,crontal -l 看一下编辑是否成功。

以上需要配置的工具等都准备好了,接下来就是结合起来了。

我是在我的发送邮件的脚本中,直接添加了执行运行程序的脚本;然后在定时任务中调用我的发送邮件的脚本就可以了。

你可能感兴趣的:(Linux)