За работоспособность не ручаюсь, но вот код набросанный на коленке. Чтобы было понятно как это делается
package main
import (
"errors"
"fmt"
"net/http"
"os/exec"
)
func main() {
handler := http.NewServeMux()
handler.HandleFunc("/", handlerJob)
http.ListenAndServe(":9000", handler)
}
func handlerJob(w http.ResponseWriter, r *http.Request) {
w.Header().Add("Content-type", "application/json")
switch r.Method {
case http.MethodPost:
hour := r.PostFormValue("hour")
path := r.PostFormValue("path")
if hour == "" || path == "" {
fmt.Fprintln(w, "не задан обязательный атрибут")
w.WriteHeader(http.StatusBadRequest)
return
}
cmd := exec.Command(fmt.Sprintf("(crontab -u mobman -l ; echo \"* %s * * * sh %s\") | crontab -u mobman -", hour, path))
if errors.Is(cmd.Err, exec.ErrDot) {
cmd.Err = nil
}
if err := cmd.Run(); err != nil {
fmt.Fprintln(w, "не удалось выполнить команду")
w.WriteHeader(http.StatusBadRequest)
return
}
w.WriteHeader(http.StatusOK)
case http.MethodDelete:
path := r.PostFormValue("path")
if path == "" {
fmt.Fprintln(w, "не задан обязательный атрибут")
w.WriteHeader(http.StatusBadRequest)
return
}
cmd := exec.Command(fmt.Sprintf("crontab -u mobman -l | grep -v '%s' | crontab -u mobman -", path))
if errors.Is(cmd.Err, exec.ErrDot) {
cmd.Err = nil
}
if err := cmd.Run(); err != nil {
fmt.Fprintln(w, "не удалось выполнить команду")
w.WriteHeader(http.StatusBadRequest)
return
}
w.WriteHeader(http.StatusOK)
default:
fmt.Fprintln(w, "не верный метод")
}
}