|
@@ -31,6 +31,8 @@ public class TickScheduler {
|
|
|
TaskMapper taskMapper;
|
|
|
@Autowired
|
|
|
ProjectMapper projectMapper;
|
|
|
+ @Value("${scheduler.manual-project.job-yaml}")
|
|
|
+ String jobYaml;
|
|
|
|
|
|
@Scheduled(fixedDelay = 2000)
|
|
|
public void tick() {
|
|
@@ -73,16 +75,31 @@ public class TickScheduler {
|
|
|
public void checkProject() {
|
|
|
//1 查询出正在运行中的 project
|
|
|
List<String> projectIdList = projectMapper.selectIdByState("20");
|
|
|
+ log.info("TickScheduler-------checkProject 查询出正在运行中的 project" + projectIdList);
|
|
|
//2 根据 projectId 获取 pod
|
|
|
projectIdList.forEach(projectId -> {
|
|
|
+
|
|
|
+ String key = manualProjectTopic + ":" + projectId + ":check";
|
|
|
+ String nowString = TimeUtil.getNowString();
|
|
|
+
|
|
|
try {
|
|
|
+ String lastNowString = redisTemplate.opsForValue().get(manualProjectTopic + ":" + projectId + ":check");
|
|
|
String execute = LinuxUtil.execute("kubectl get pod | grep project-" + projectId);
|
|
|
int i = StringUtil.countSubString(execute, projectId);
|
|
|
- if (i == 0) {
|
|
|
- LinuxUtil.execute("kubectl delete job project-" + projectId);
|
|
|
- log.info("TickScheduler-------checkProject 重新执行项目" + projectId);
|
|
|
- String jobTemplateYamlPathTarget = "/opt/simulation-cloud/simulation-resource-scheduler/job-yaml/" + "project-" + projectId + ".yaml";
|
|
|
- LinuxUtil.execute("kubectl apply -f " + jobTemplateYamlPathTarget);
|
|
|
+ if (StringUtil.isEmpty(lastNowString) && i == 0) {
|
|
|
+ redisTemplate.opsForValue().set(key, nowString);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (StringUtil.isNotEmpty(lastNowString) && i == 0) {
|
|
|
+ // 判断两次是否超过2分钟
|
|
|
+ long lastNow = Long.parseLong(lastNowString);
|
|
|
+ long now = Long.parseLong(nowString);
|
|
|
+ if (now - lastNow > 2L * 60 * 1000) {
|
|
|
+ LinuxUtil.execute("kubectl delete job project-" + projectId);
|
|
|
+ log.info("TickScheduler-------checkProject 重新执行项目" + projectId);
|
|
|
+ String jobTemplateYamlPathTarget = jobYaml + "project-" + projectId + ".yaml";
|
|
|
+ LinuxUtil.execute("kubectl apply -f " + jobTemplateYamlPathTarget);
|
|
|
+ }
|
|
|
}
|
|
|
} catch (IOException e) {
|
|
|
e.printStackTrace();
|