https://github.com/mekramy/gounix
managing system services, cron jobs, and Nginx reverse proxies on Unix-based systems from go code
https://github.com/mekramy/gounix
cronjob go golang mekramy-go nginx systemd unix-utility
Last synced: 2 months ago
JSON representation
managing system services, cron jobs, and Nginx reverse proxies on Unix-based systems from go code
- Host: GitHub
- URL: https://github.com/mekramy/gounix
- Owner: mekramy
- License: isc
- Created: 2025-01-26T14:57:47.000Z (5 months ago)
- Default Branch: master
- Last Pushed: 2025-02-14T16:20:50.000Z (4 months ago)
- Last Synced: 2025-02-14T17:27:38.453Z (4 months ago)
- Topics: cronjob, go, golang, mekramy-go, nginx, systemd, unix-utility
- Language: Go
- Homepage:
- Size: 9.77 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# gounix
`gounix` is a Go library for managing cron jobs, Nginx server blocks, and systemd services. This library provides a simple and consistent API for creating, installing, and managing these services.
## Installation
To install `gounix`, use `go get`:
```sh
go get github.com/mekramy/gounix
```## Usage
### Cron Jobs
The `CronJob` interface provides methods for scheduling and managing cron jobs. You can set time zone (e.g. +3:30 for Asia/Tehran) to run cron based on your timezone.
**CAUTION**: `AtReboot`, `Yearly` ,`Monthly`, `Weekly` and `Daily` method should called before other method otherwise it's override previous settings.
- `AtReboot() CronJob`
- `Yearly() CronJob`
- `Monthly() CronJob`
- `Weekly(wd Weekday) CronJob`
- `Daily() CronJob`
- `EveryXHours(hours int) CronJob`
- `EveryXMinutes(minutes int) CronJob`
- `SetMinute(minute int) CronJob`
- `SetHour(hour int) CronJob`
- `SetDayOfMonth(day int) CronJob`
- `SetMonth(month int) CronJob`
- `SetDayOfWeek(day Weekday) CronJob`
- `Command(command string) CronJob`
- `Compile() string`
- `Exists() (bool, error)`
- `Install() (bool, error)`
- `Uninstall() error````go
package mainimport (
"fmt"
"github.com/mekramy/gounix"
)func main() {
tz := gounix.NewTZ().Hour(-2).Minute(30).Weekend(gounix.Friday)
cronJob := gounix.NewCronJob("echo 'Hello, World!'", tz).
Daily().
SetHour(2).
SetMinute(30).
Command("echo 'Hello, World!'")if installed, err := cronJob.Install(); err != nil {
fmt.Println("Error installing cron job:", err)
} else if installed {
fmt.Println("Cron job installed successfully")
} else {
fmt.Println("Cron job already exists")
}
}
```### Nginx Server Blocks
The `ServerBlock` interface provides methods for managing Nginx server blocks.
- `Name(name string) ServerBlock`
- `Port(port string) ServerBlock`
- `Domains(domains ...string) ServerBlock`
- `Template(engine TemplateEngine) ServerBlock`
- `Disable() error`
- `Enable() error`
- `Exists() (bool, error)`
- `Enabled() (bool, error)`
- `Install(override bool) (bool, error)`
- `Uninstall() error````go
package mainimport (
"fmt"
"github.com/mekramy/gounix"
)func main() {
serverBlock := gounix.NewNginxReverseProxy("example", "8080").
Domains("example.com", "www.example.com")if installed, err := serverBlock.Install(true); err != nil {
fmt.Println("Error installing server block:", err)
} else if installed {
fmt.Println("Server block installed successfully")
} else {
fmt.Println("Server block already exists")
}
}
```### Systemd Services
The `SystemdService` interface provides methods for managing systemd services.
- `Name(name string) SystemdService`
- `Root(dir string) SystemdService`
- `Command(command string) SystemdService`
- `Template(engine TemplateEngine) SystemdService`
- `Exists() bool`
- `Enabled() bool`
- `Install(override bool) (bool, error)`
- `Uninstall() error````go
package mainimport (
"fmt"
"github.com/mekramy/gounix"
)func main() {
service := gounix.NewSystemdService("example-service", "/path/to/service", "service-command")if installed, err := service.Install(true); err != nil {
fmt.Println("Error installing systemd service:", err)
} else if installed {
fmt.Println("Systemd service installed successfully")
} else {
fmt.Println("Systemd service already exists")
}
}
```### Template Engine
The `TemplateEngine` interface provides methods for managing `{bracket wrapped}` templates.
- `SetTemplate(template string) TemplateEngine`
- `AddParameter(name, value string) TemplateEngine`
- `Compile() string````go
package mainimport (
"fmt"
"github.com/mekramy/gounix"
)func main() {
engine := gounix.NewTemplate().
SetTemplate("Hello, {name}!").
AddParameter("name", "World")fmt.Println(engine.compile()) // Output: Hello, World!
}
```### Utility Functions
#### `IsSudo`
Checks if the program is running with sudo privileges.
```go
package mainimport (
"fmt"
"github.com/mekramy/gounix"
)func main() {
if gounix.IsSudo() {
fmt.Println("Running with sudo privileges")
} else {
fmt.Println("Not running with sudo privileges")
}
}
```