cronping

Go

Ping Cronping from Go applications and scripts.

Go's standard library net/http package is all you need — no external dependencies required.

Basic usage

package main

import (
	"fmt"
	"net/http"
	"time"
)

func pingCronping(token string) {
	client := &http.Client{Timeout: 10 * time.Second}
	url := "https://ping.cronping.com/" + token
	resp, err := client.Get(url)
	if err != nil {
		fmt.Printf("Cronping ping failed: %v\n", err)
		return // Don't exit — the job succeeded
	}
	defer resp.Body.Close()
}

func main() {
	// ... your job logic ...

	pingCronping("<token>")
}

With context and timeout

Using context gives you more control over cancellation:

package main

import (
	"context"
	"fmt"
	"net/http"
	"time"
)

func pingCronping(token string) {
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()

	req, err := http.NewRequestWithContext(ctx, http.MethodGet, "https://ping.cronping.com/"+token, nil)
	if err != nil {
		fmt.Printf("Cronping request creation failed: %v\n", err)
		return
	}

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		fmt.Printf("Cronping ping failed: %v\n", err)
		return
	}
	defer resp.Body.Close()
}

As a deferred call

Run the ping automatically at the end of a function, even if it returns early:

package main

import (
	"fmt"
	"net/http"
	"time"
)

func pingCronping(token string) {
	client := &http.Client{Timeout: 10 * time.Second}
	resp, err := client.Get("https://ping.cronping.com/" + token)
	if err != nil {
		fmt.Printf("Cronping ping failed: %v\n", err)
		return
	}
	defer resp.Body.Close()
}

func runBackup() error {
	defer pingCronping("<token>") // always runs on success path

	// ... your job logic ...
	return nil
}

func main() {
	if err := runBackup(); err != nil {
		fmt.Printf("Job failed: %v\n", err)
	}
}

In a cron job (robfig/cron)

package main

import (
	"fmt"
	"net/http"
	"time"

	"github.com/robfig/cron/v3"
)

func pingCronping(token string) {
	client := &http.Client{Timeout: 10 * time.Second}
	resp, err := client.Get("https://ping.cronping.com/" + token)
	if err != nil {
		fmt.Printf("Cronping ping failed: %v\n", err)
		return
	}
	defer resp.Body.Close()
}

func main() {
	c := cron.New()

	c.AddFunc("0 3 * * *", func() {
		// ... your job logic ...

		pingCronping("<token>")
	})

	c.Start()
	select {} // block forever
}

On this page