一、背景
构建的容器版JMeter,每次执行必须手动进入容器后,输入命令行执行脚本,希望能够定时执行脚本,不需要每次手动执行;
二、实现步骤
(1)创建start.sh作为脚本执行文件
touch start.sh
(2)编辑start.sh文件
vim start.sh
(3)在start.sh文件输入脚本内容
#!/bin/sh
echo "$(date +"%Y-%m-%d %T") 执行一次!" >>/root/Jmeter/test.txt
echo "进入Jmeter容器"
#将jmeter容器ID定义为参数
my_container="0253a969b5dc"
#output为存放执行结果的文件夹,每次执行脚本前需清空
docker exec $my_container /bin/sh -c 'echo "删除output文件夹"'
docker exec $my_container /bin/sh -c 'rm -rf output/*'
docker exec $my_container /bin/sh -c 'echo "执行脚本"'
docker exec $my_container /bin/sh -c 'jmeter -n -t jmx/compare1.jmx -l output/result.jtl -Jthreads=1 -JrampUpTime=1 -Jcycles=1 -e -o output'
注:查询jmeter容器id(容器停机并新启动后,容器ID会改变)
docker ps | grep jmeter
(4)给start.sh添加执行权限
chmod +x start.sh
(5)试运行
./start.sh
执行结果:
(6)进入定时任务配置文件
vim /etc/crontab
(7)定时任务配置文件中,末尾加上给start.sh文件添加定时执行规则
#root用户,每分钟执行一次start.sh脚本
*/1 * * * * root /root/Jmeter/start.sh
注:在线Cron表达式生成器https://cron.qqe2.com/
(8)重启crontab生效
/bin/systemctl restart crond.service
注:其他涉及的命令
#查询crond定时任务服务状态,enable为启用,disable为禁用
systemctl is-enabled crond.service
#启用crond定时任务服务
systemctl enable crond.service
#禁用crond定时任务服务
systemctl disable crond.service
(9)查询执行结果
注:执行结果里有一些是调试时手动执行的结果;