1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- package pidfile
- import (
- "fmt"
- "io/ioutil"
- "log"
- "os"
- "path/filepath"
- "strconv"
- )
- type PidFile struct {
- path string
- }
- func checkPidFileAlreadyExists(path string) error {
- if pidString, err := ioutil.ReadFile(path); err == nil {
- if pid, err := strconv.Atoi(string(pidString)); err == nil {
- if _, err := os.Stat(filepath.Join("/proc", string(pid))); err == nil {
- return fmt.Errorf("pid file found, ensure docker is not running or delete %s", path)
- }
- }
- }
- return nil
- }
- func New(path string) (*PidFile, error) {
- if err := checkPidFileAlreadyExists(path); err != nil {
- return nil, err
- }
- if err := ioutil.WriteFile(path, []byte(fmt.Sprintf("%d", os.Getpid())), 0644); err != nil {
- return nil, err
- }
- return &PidFile{path: path}, nil
- }
- func (file PidFile) Remove() error {
- if err := os.Remove(file.path); err != nil {
- log.Printf("Error removing %s: %s", file.path, err)
- return err
- }
- return nil
- }
|