добавил уведомление о том, что необъодимо заполнить bckr.json если его нет в директории

main
serr 2025-05-02 22:53:51 +03:00
parent f777b86ad7
commit 15f571de12
3 changed files with 124 additions and 125 deletions

176
.bckr.log
View File

@ -1,116 +1,60 @@
bckr | 2025/05/02 20:46:12 Archive created successfully: backup_2025-05-02_20-46-12.zip bckr | 2025/05/02 22:15:28 Archive created successfully: backup_2025-05-02_22-15-28.zip
bckr | 2025/05/02 20:46:14 Archive sent successfully: backup_2025-05-02_20-46-12.zip bckr | 2025/05/02 22:15:30 Archive sent successfully: backup_2025-05-02_22-15-28.zip
bckr | 2025/05/02 20:47:14 Archive created successfully: backup_2025-05-02_20-47-14.zip bckr | 2025/05/02 22:15:39 Already running. Shutdown...
bckr | 2025/05/02 20:47:15 Archive sent successfully: backup_2025-05-02_20-47-14.zip bckr | 2025/05/02 22:15:56 Archive created successfully: backup_2025-05-02_22-15-55.zip
bckr | 2025/05/02 20:54:35 Archive created successfully: backup_2025-05-02_20-54-34.zip bckr | 2025/05/02 22:15:57 Archive sent successfully: backup_2025-05-02_22-15-55.zip
bckr | 2025/05/02 20:54:36 Archive sent successfully: backup_2025-05-02_20-54-34.zip bckr | 2025/05/02 22:15:59 Already running. Shutdown...
bckr | 2025/05/02 20:55:28 User requested exit bckr | 2025/05/02 22:16:44 Archive created successfully: backup_2025-05-02_22-16-44.zip
bckr | 2025/05/02 20:56:13 Archive created successfully: backup_2025-05-02_20-56-13.zip bckr | 2025/05/02 22:16:46 Archive sent successfully: backup_2025-05-02_22-16-44.zip
bckr | 2025/05/02 20:56:15 Archive sent successfully: backup_2025-05-02_20-56-13.zip bckr | 2025/05/02 22:16:50 Already running. Shutdown...
bckr | 2025/05/02 20:56:35 User requested exit bckr | 2025/05/02 22:17:09 Archive created successfully: backup_2025-05-02_22-17-08.zip
bckr | 2025/05/02 20:56:41 Archive created successfully: backup_2025-05-02_20-56-41.zip bckr | 2025/05/02 22:17:10 Archive sent successfully: backup_2025-05-02_22-17-08.zip
bckr | 2025/05/02 20:56:51 Archive sent successfully: backup_2025-05-02_20-56-41.zip bckr | 2025/05/02 22:17:23 Already running. Shutdown...
bckr | 2025/05/02 20:57:09 User requested exit bckr | 2025/05/02 22:18:00 Archive created successfully: backup_2025-05-02_22-18-00.zip
bckr | 2025/05/02 20:58:17 Archive created successfully: backup_2025-05-02_20-58-17.zip bckr | 2025/05/02 22:18:02 Archive sent successfully: backup_2025-05-02_22-18-00.zip
bckr | 2025/05/02 20:58:19 Archive sent successfully: backup_2025-05-02_20-58-17.zip bckr | 2025/05/02 22:18:04 Already running. Shutdown...
bckr | 2025/05/02 21:12:51 Archive created successfully: backup_2025-05-02_21-12-50.zip bckr | 2025/05/02 22:18:34 Archive created successfully: backup_2025-05-02_22-18-34.zip
bckr | 2025/05/02 21:12:53 Archive sent successfully: backup_2025-05-02_21-12-50.zip bckr | 2025/05/02 22:18:36 Archive sent successfully: backup_2025-05-02_22-18-34.zip
bckr | 2025/05/02 21:13:53 Archive created successfully: backup_2025-05-02_21-13-53.zip bckr | 2025/05/02 22:18:38 Already running. Shutdown...
bckr | 2025/05/02 21:13:54 Archive sent successfully: backup_2025-05-02_21-13-53.zip bckr | 2025/05/02 22:27:41 Archive created successfully: backup_2025-05-02_22-27-41.zip
bckr | 2025/05/02 21:14:54 Archive created successfully: backup_2025-05-02_21-14-54.zip bckr | 2025/05/02 22:27:43 Archive sent successfully: backup_2025-05-02_22-27-41.zip
bckr | 2025/05/02 21:14:56 Archive sent successfully: backup_2025-05-02_21-14-54.zip bckr | 2025/05/02 22:27:50 Already running. Shutdown...
bckr | 2025/05/02 21:15:56 Archive created successfully: backup_2025-05-02_21-15-56.zip bckr | 2025/05/02 22:34:20 Please fill in the configuration file (bckr.json) in current dir
bckr | 2025/05/02 21:15:57 Archive sent successfully: backup_2025-05-02_21-15-56.zip bckr | 2025/05/02 22:37:06 Warning: target path does not exist:
bckr | 2025/05/02 21:16:57 Archive created successfully: backup_2025-05-02_21-16-57.zip bckr | 2025/05/02 22:37:06 Archive created successfully: backup_2025-05-02_22-37-06.zip
bckr | 2025/05/02 21:16:58 Archive sent successfully: backup_2025-05-02_21-16-57.zip bckr | 2025/05/02 22:37:06 Archive sent successfully: backup_2025-05-02_22-37-06.zip
bckr | 2025/05/02 21:17:59 Archive created successfully: backup_2025-05-02_21-17-58.zip bckr | 2025/05/02 22:37:16 Already running. Shutdown...
bckr | 2025/05/02 21:18:00 Archive sent successfully: backup_2025-05-02_21-17-58.zip bckr | 2025/05/02 22:37:24 Please fill in the configuration file (bckr.json) in current dir
bckr | 2025/05/02 21:19:00 Archive created successfully: backup_2025-05-02_21-19-00.zip bckr | 2025/05/02 22:38:36 Archive created successfully: backup_2025-05-02_22-38-36.zip
bckr | 2025/05/02 21:19:01 Archive sent successfully: backup_2025-05-02_21-19-00.zip bckr | 2025/05/02 22:38:36 Archive sent successfully: backup_2025-05-02_22-38-36.zip
bckr | 2025/05/02 21:20:01 Archive created successfully: backup_2025-05-02_21-20-01.zip bckr | 2025/05/02 22:39:36 Archive created successfully: backup_2025-05-02_22-39-36.zip
bckr | 2025/05/02 21:20:03 Archive sent successfully: backup_2025-05-02_21-20-01.zip bckr | 2025/05/02 22:39:37 Archive sent successfully: backup_2025-05-02_22-39-36.zip
bckr | 2025/05/02 21:21:03 Archive created successfully: backup_2025-05-02_21-21-03.zip bckr | 2025/05/02 22:39:57 Already running. Shutdown...
bckr | 2025/05/02 21:21:04 Archive sent successfully: backup_2025-05-02_21-21-03.zip bckr | 2025/05/02 22:40:47 Archive created successfully: backup_2025-05-02_22-40-46.zip
bckr | 2025/05/02 21:22:04 Archive created successfully: backup_2025-05-02_21-22-04.zip bckr | 2025/05/02 22:40:48 Archive sent successfully: backup_2025-05-02_22-40-46.zip
bckr | 2025/05/02 21:22:06 Archive sent successfully: backup_2025-05-02_21-22-04.zip bckr | 2025/05/02 22:41:48 Archive created successfully: backup_2025-05-02_22-41-48.zip
bckr | 2025/05/02 21:23:06 Archive created successfully: backup_2025-05-02_21-23-06.zip bckr | 2025/05/02 22:41:49 Archive sent successfully: backup_2025-05-02_22-41-48.zip
bckr | 2025/05/02 21:23:07 Archive sent successfully: backup_2025-05-02_21-23-06.zip bckr | 2025/05/02 22:41:57 Already running. Shutdown...
bckr | 2025/05/02 21:23:38 Archive created successfully: backup_2025-05-02_21-23-38.zip bckr | 2025/05/02 22:43:54 Archive created successfully: backup_2025-05-02_22-43-54.zip
bckr | 2025/05/02 21:23:40 Archive sent successfully: backup_2025-05-02_21-23-38.zip bckr | 2025/05/02 22:43:56 Archive sent successfully: backup_2025-05-02_22-43-54.zip
bckr | 2025/05/02 21:24:07 Archive created successfully: backup_2025-05-02_21-24-07.zip bckr | 2025/05/02 22:44:05 Already running. Shutdown...
bckr | 2025/05/02 21:24:09 Archive sent successfully: backup_2025-05-02_21-24-07.zip bckr | 2025/05/02 22:45:18 Archive created successfully: backup_2025-05-02_22-45-18.zip
bckr | 2025/05/02 21:24:40 Archive created successfully: backup_2025-05-02_21-24-40.zip bckr | 2025/05/02 22:45:18 Archive sent successfully: backup_2025-05-02_22-45-18.zip
bckr | 2025/05/02 21:24:42 Archive sent successfully: backup_2025-05-02_21-24-40.zip bckr | 2025/05/02 22:45:48 Already running. Shutdown...
bckr | 2025/05/02 21:25:09 Archive created successfully: backup_2025-05-02_21-25-09.zip bckr | 2025/05/02 22:45:53 Archive created successfully: backup_2025-05-02_22-45-53.zip
bckr | 2025/05/02 21:25:10 Archive sent successfully: backup_2025-05-02_21-25-09.zip bckr | 2025/05/02 22:45:53 Archive sent successfully: backup_2025-05-02_22-45-53.zip
bckr | 2025/05/02 21:25:42 Archive created successfully: backup_2025-05-02_21-25-42.zip bckr | 2025/05/02 22:46:13 Already running. Shutdown...
bckr | 2025/05/02 21:25:43 Archive sent successfully: backup_2025-05-02_21-25-42.zip bckr | 2025/05/02 22:46:52 Archive created successfully: backup_2025-05-02_22-46-51.zip
bckr | 2025/05/02 21:26:18 Archive created successfully: backup_2025-05-02_21-26-17.zip bckr | 2025/05/02 22:46:53 Archive sent successfully: backup_2025-05-02_22-46-51.zip
bckr | 2025/05/02 21:26:20 Archive sent successfully: backup_2025-05-02_21-26-17.zip bckr | 2025/05/02 22:47:53 Archive created successfully: backup_2025-05-02_22-47-53.zip
bckr | 2025/05/02 21:28:01 Archive created successfully: backup_2025-05-02_21-28-01.zip bckr | 2025/05/02 22:47:55 Archive sent successfully: backup_2025-05-02_22-47-53.zip
bckr | 2025/05/02 21:28:03 Archive sent successfully: backup_2025-05-02_21-28-01.zip bckr | 2025/05/02 22:48:55 Archive created successfully: backup_2025-05-02_22-48-55.zip
bckr | 2025/05/02 21:29:03 Archive created successfully: backup_2025-05-02_21-29-03.zip bckr | 2025/05/02 22:48:56 Archive sent successfully: backup_2025-05-02_22-48-55.zip
bckr | 2025/05/02 21:29:04 Archive sent successfully: backup_2025-05-02_21-29-03.zip bckr | 2025/05/02 22:49:00 Already running. Shutdown...
bckr | 2025/05/02 21:33:45 [13 10 136 172 239 32 174 161 224 160 167 160 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 80 73 68 32 136 172 239 32 225 165 225 225 168 168 32 32 32 32 32 32 32 32 32 32 252 32 225 165 160 173 225 160 32 32 32 32 32 32 32 143 160 172 239 226 236 13 10 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 32 61 61 61 61 61 61 61 61 32 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 32 61 61 61 61 61 61 61 61 61 61 61 32 61 61 61 61 61 61 61 61 61 61 61 61 13 10 98 99 107 114 46 101 120 101 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 49 53 54 50 48 32 67 111 110 115 111 108 101 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 49 32 32 32 32 32 54 255 56 48 52 32 138 129 13 10] bckr | 2025/05/02 22:50:38 Archive created successfully: backup_2025-05-02_22-50-38.zip
bckr | 2025/05/02 21:34:54 [13 10 136 172 239 32 174 161 224 160 167 160 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 80 73 68 32 136 172 239 32 225 165 225 225 168 168 32 32 32 32 32 32 32 32 32 32 252 32 225 165 160 173 225 160 32 32 32 32 32 32 32 143 160 172 239 226 236 13 10 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 32 61 61 61 61 61 61 61 61 32 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 32 61 61 61 61 61 61 61 61 61 61 61 32 61 61 61 61 61 61 61 61 61 61 61 61 13 10 98 99 107 114 46 101 120 101 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 49 53 57 50 32 67 111 110 115 111 108 101 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 49 32 32 32 32 32 54 255 51 50 52 32 138 129 13 10] bckr | 2025/05/02 22:50:40 Archive sent successfully: backup_2025-05-02_22-50-38.zip
bckr | 2025/05/02 21:34:54 Archive created successfully: backup_2025-05-02_21-34-54.zip bckr | 2025/05/02 22:51:40 Archive created successfully: backup_2025-05-02_22-51-40.zip
bckr | 2025/05/02 21:34:56 Archive sent successfully: backup_2025-05-02_21-34-54.zip bckr | 2025/05/02 22:51:41 Archive sent successfully: backup_2025-05-02_22-51-40.zip
bckr | 2025/05/02 21:35:04 [13 10 136 172 239 32 174 161 224 160 167 160 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 80 73 68 32 136 172 239 32 225 165 225 225 168 168 32 32 32 32 32 32 32 32 32 32 252 32 225 165 160 173 225 160 32 32 32 32 32 32 32 143 160 172 239 226 236 13 10 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 32 61 61 61 61 61 61 61 61 32 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 32 61 61 61 61 61 61 61 61 61 61 61 32 61 61 61 61 61 61 61 61 61 61 61 61 13 10 98 99 107 114 46 101 120 101 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 49 53 57 50 32 67 111 110 115 111 108 101 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 49 32 32 32 32 51 53 255 49 57 50 32 138 129 13 10 98 99 107 114 46 101 120 101 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 49 55 55 55 50 32 67 111 110 115 111 108 101 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 49 32 32 32 32 32 56 255 48 48 48 32 138 129 13 10] bckr | 2025/05/02 22:52:42 Archive created successfully: backup_2025-05-02_22-52-41.zip
bckr | 2025/05/02 21:35:04 Archive created successfully: backup_2025-05-02_21-35-04.zip bckr | 2025/05/02 22:52:43 Archive sent successfully: backup_2025-05-02_22-52-41.zip
bckr | 2025/05/02 21:35:05 Archive sent successfully: backup_2025-05-02_21-35-04.zip bckr | 2025/05/02 22:52:45 Already running. Shutdown...
bckr | 2025/05/02 21:35:47
<EFBFBD>¬ď ®ˇŕ §  PID <20>¬ď áĄáᨨ ü ᥠ­á  Ź ¬ďâě
========================= ======== ================ =========== ============
bckr.exe 17468 Console 1 6˙788 Š<>
bckr | 2025/05/02 21:35:47 Archive created successfully: backup_2025-05-02_21-35-47.zip
bckr | 2025/05/02 21:35:49 Archive sent successfully: backup_2025-05-02_21-35-47.zip
bckr | 2025/05/02 21:38:39
<EFBFBD>¬ď ®ˇŕ §  PID <20>¬ď áĄáᨨ ü ᥠ­á  Ź ¬ďâě
========================= ======== ================ =========== ============
bckr.exe 2520 Console 1 6˙316 Š<>
bckr | 2025/05/02 21:38:39 Archive created successfully: backup_2025-05-02_21-38-39.zip
bckr | 2025/05/02 21:38:41 Archive sent successfully: backup_2025-05-02_21-38-39.zip
bckr | 2025/05/02 21:39:41 Archive created successfully: backup_2025-05-02_21-39-41.zip
bckr | 2025/05/02 21:39:42 Archive sent successfully: backup_2025-05-02_21-39-41.zip
bckr | 2025/05/02 21:40:42 Archive created successfully: backup_2025-05-02_21-40-42.zip
bckr | 2025/05/02 21:40:44 Archive sent successfully: backup_2025-05-02_21-40-42.zip
bckr | 2025/05/02 21:42:02 [34 98 99 107 114 46 101 120 101 34 44 34 49 55 48 50 52 34 44 34 67 111 110 115 111 108 101 34 44 34 49 34 44 34 54 255 56 49 54 32 138 129 34 13 10]
bckr | 2025/05/02 21:42:19 "bckr.exe","16532","Console","1","6˙784 Š<>"
bckr | 2025/05/02 21:43:47 Running
bckr | 2025/05/02 21:44:46 42
bckr | 2025/05/02 21:44:46 Running
bckr | 2025/05/02 21:46:42 1
bckr | 2025/05/02 21:46:42 Running
bckr | 2025/05/02 21:47:52 No running
bckr | 2025/05/02 21:47:52 Archive created successfully: backup_2025-05-02_21-47-52.zip
bckr | 2025/05/02 21:47:54 Archive sent successfully: backup_2025-05-02_21-47-52.zip
bckr | 2025/05/02 21:48:40 Running
bckr | 2025/05/02 21:48:54 Archive created successfully: backup_2025-05-02_21-48-54.zip
bckr | 2025/05/02 21:48:55 Archive sent successfully: backup_2025-05-02_21-48-54.zip
bckr | 2025/05/02 21:49:24 No running
bckr | 2025/05/02 21:49:24 Archive created successfully: backup_2025-05-02_21-49-24.zip
bckr | 2025/05/02 21:49:25 Archive sent successfully: backup_2025-05-02_21-49-24.zip
bckr | 2025/05/02 21:49:28 Running
bckr | 2025/05/02 21:49:28 Running
bckr | 2025/05/02 21:49:29 Running
bckr | 2025/05/02 21:49:29 Running
bckr | 2025/05/02 21:52:14 Archive created successfully: backup_2025-05-02_21-52-14.zip
bckr | 2025/05/02 21:52:15 Archive sent successfully: backup_2025-05-02_21-52-14.zip
bckr | 2025/05/02 21:52:17 Already running
bckr | 2025/05/02 21:53:02 Already running
bckr | 2025/05/02 21:53:16 Archive created successfully: backup_2025-05-02_21-53-15.zip
bckr | 2025/05/02 21:53:17 Archive sent successfully: backup_2025-05-02_21-53-15.zip
bckr | 2025/05/02 21:54:18 Archive created successfully: backup_2025-05-02_21-54-17.zip
bckr | 2025/05/02 21:54:19 Archive sent successfully: backup_2025-05-02_21-54-17.zip
bckr | 2025/05/02 22:01:57 Archive created successfully: backup_2025-05-02_22-01-57.zip
bckr | 2025/05/02 22:01:59 Archive sent successfully: backup_2025-05-02_22-01-57.zip
bckr | 2025/05/02 22:02:05 Already running. Shutdown...
bckr | 2025/05/02 22:03:25 Archive created successfully: backup_2025-05-02_22-03-24.zip
bckr | 2025/05/02 22:03:26 Archive sent successfully: backup_2025-05-02_22-03-24.zip
bckr | 2025/05/02 22:03:30 Already running. Shutdown...
bckr | 2025/05/02 22:06:32 Archive created successfully: backup_2025-05-02_22-06-32.zip
bckr | 2025/05/02 22:06:33 Archive sent successfully: backup_2025-05-02_22-06-32.zip
bckr | 2025/05/02 22:06:47 Already running. Shutdown...

3
.gitignore vendored
View File

@ -1,2 +1,3 @@
.bckr.json bckr.json
.bckr.log
*.exe *.exe

70
main.go
View File

@ -19,8 +19,13 @@ import (
"time" "time"
) )
const (
LOG_FILE_PATH = ".bckr.log"
CONFIG_FILE_PATH = "bckr.json"
)
func init() { func init() {
logFile, err := os.OpenFile(".bckr.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644) logFile, err := os.OpenFile(LOG_FILE_PATH, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
@ -30,6 +35,19 @@ func init() {
func main() { func main() {
if !fileExists(CONFIG_FILE_PATH) {
if err := createDefaultConfig(); err != nil {
log.Println(err)
}
msg := fmt.Sprintf("Please fill in the configuration file (%s) in current dir", CONFIG_FILE_PATH)
log.Println(msg)
fmt.Println(msg)
fmt.Print("Press any key to exit...")
var b [1]byte
os.Stdin.Read(b[:])
return
}
// Если процесс процесс с именем этого исполняемого файла уже запущен // Если процесс процесс с именем этого исполняемого файла уже запущен
// то закрываем и его и текущий процесс // то закрываем и его и текущий процесс
exeName := filepath.Base(os.Args[0]) exeName := filepath.Base(os.Args[0])
@ -38,15 +56,16 @@ func main() {
if err := killProcByExeName(exeName); err != nil { if err := killProcByExeName(exeName); err != nil {
log.Println("Cant kill proc") log.Println("Cant kill proc")
} }
os.Exit(0) return
} }
//
hideConsoleWindow() hideConsoleWindow()
for { for {
// Загрузка конфига // Загрузка конфига
config, err := loadConfig(".bckr.json") config, err := loadConfig(CONFIG_FILE_PATH)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
@ -96,9 +115,43 @@ func loadConfig(configPath string) (*config, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
cfg.IgnoreFilesOrDirs = removeEmptyStrings(cfg.IgnoreFilesOrDirs)
return cfg, nil return cfg, nil
} }
func removeEmptyStrings(slice []string) []string {
var result []string
for _, s := range slice {
if s != "" {
result = append(result, s)
}
}
return result
}
func createDefaultConfig() error {
defaultConfig := config{
TGYourBotToken: "",
TGYourUserId: "",
IntervalInSeconds: 60,
TargetsFilesOrDirs: []string{""},
IgnoreFilesOrDirs: []string{""},
}
configData, err := json.MarshalIndent(defaultConfig, "", " ")
if err != nil {
return err
}
err = os.WriteFile(CONFIG_FILE_PATH, configData, 0644)
if err != nil {
return err
}
return nil
}
func createArchive(archiveName string, targets, ignore []string) error { func createArchive(archiveName string, targets, ignore []string) error {
// Создание файла архива // Создание файла архива
archiveFile, err := os.Create(archiveName) archiveFile, err := os.Create(archiveName)
@ -140,11 +193,7 @@ func createArchive(archiveName string, targets, ignore []string) error {
return false return false
} }
if slices.Contains(ignorePaths, absPath) { return slices.Contains(ignorePaths, absPath)
return true
}
return false
} }
// //
@ -270,6 +319,11 @@ func TGBotSendFile(botToken, userId, filePath, caption string) error {
return nil return nil
} }
func fileExists(filename string) bool {
_, err := os.Stat(filename)
return !os.IsNotExist(err)
}
func killProcByExeName(exeName string) error { func killProcByExeName(exeName string) error {
if runtime.GOOS == "windows" { if runtime.GOOS == "windows" {
cmd := exec.Command("taskkill", "/IM", exeName, "/F", "/T") cmd := exec.Command("taskkill", "/IM", exeName, "/F", "/T")