1
1
package service
2
2
3
3
import (
4
+ "context"
4
5
"encoding/json"
5
6
"fmt"
6
7
"os"
@@ -15,6 +16,7 @@ import (
15
16
"github.com/1Panel-dev/1Panel/agent/buserr"
16
17
"github.com/1Panel-dev/1Panel/agent/constant"
17
18
"github.com/1Panel-dev/1Panel/agent/global"
19
+ "github.com/1Panel-dev/1Panel/agent/utils/docker"
18
20
"github.com/jinzhu/copier"
19
21
"github.com/pkg/errors"
20
22
"github.com/robfig/cron/v3"
@@ -159,6 +161,14 @@ func (u *CronjobService) Export(req dto.OperateByIDs) (string, error) {
159
161
for _ , db := range databases {
160
162
item .DBNames = append (item .DBNames , dto.TransHelper {Name : db .Database , DetailName : db .Name })
161
163
}
164
+ case "shell" :
165
+ if cronjob .ScriptMode == "library" {
166
+ script , err := scriptRepo .Get (repo .WithByID (cronjob .ScriptID ))
167
+ if err != nil {
168
+ return "" , err
169
+ }
170
+ item .ScriptName = script .Name
171
+ }
162
172
}
163
173
item .SourceAccounts , item .DownloadAccount , _ = loadBackupNamesByID (cronjob .SourceAccountIDs , cronjob .DownloadAccountID )
164
174
alertInfo , _ := alertRepo .Get (alertRepo .WithByType (cronjob .Type ), alertRepo .WithByProject (strconv .Itoa (int (cronjob .ID ))), repo .WithByStatus (constant .AlertEnable ))
@@ -191,7 +201,6 @@ func (u *CronjobService) Import(req []dto.CronjobTrans) error {
191
201
Spec : item .Spec ,
192
202
Executor : item .Executor ,
193
203
ScriptMode : item .ScriptMode ,
194
- Script : item .Script ,
195
204
Command : item .Command ,
196
205
ContainerName : item .ContainerName ,
197
206
User : item .User ,
@@ -265,6 +274,36 @@ func (u *CronjobService) Import(req []dto.CronjobTrans) error {
265
274
}
266
275
}
267
276
cronjob .DBName = strings .Join (dbIDs , "," )
277
+ case "shell" :
278
+ if len (item .ContainerName ) != 0 {
279
+ client , err := docker .NewDockerClient ()
280
+ if err != nil {
281
+ hasNotFound = true
282
+ continue
283
+ }
284
+ defer client .Close ()
285
+ if _ , err := client .ContainerStats (context .Background (), item .ContainerName , false ); err != nil {
286
+ hasNotFound = true
287
+ continue
288
+ }
289
+ }
290
+ switch item .ScriptMode {
291
+ case "library" :
292
+ library , _ := scriptRepo .Get (repo .WithByName (item .ScriptName ))
293
+ if library .ID == 0 {
294
+ hasNotFound = true
295
+ continue
296
+ }
297
+ cronjob .ScriptID = library .ID
298
+ case "select" :
299
+ if _ , err := os .Stat (item .Script ); err != nil {
300
+ hasNotFound = true
301
+ continue
302
+ }
303
+ cronjob .Script = item .Script
304
+ case "input" :
305
+ cronjob .Script = item .Script
306
+ }
268
307
}
269
308
var acIDs []string
270
309
for _ , ac := range item .SourceAccounts {
0 commit comments