1. 程式人生 > 其它 >linux開機自啟動_chkconfig

linux開機自啟動_chkconfig

linux開機自啟動_chkconfig

  1. 準備可執行程式 g
  2. 準備shell指令碼 s,s裡面是執行g, 放在 /etc/init.d 目錄下
  3. 執行 chkconfig --add s

對於凝思,假如程式是守護程式,但是手動啟動耗時,需要重啟,所以需要上面的方式弄一個重啟服務

func (this *Installer) RestartDog() {
	shellName := "/etc/init.d/rsdog"
	exit, _ := PathExists(shellName)
	if exit {
		if err := os.Remove(shellName); err != nil {
			fmt.Errorf("delete errors:%s", err)
		}
	}

	var buf string
	fp, err := os.OpenFile(shellName, os.O_APPEND|os.O_CREATE|os.O_RDWR, 0666)
	if err != nil {
		fmt.Errorf("write shell err:", err.Error())
	}
	defer func() {
		fp.Sync()
		fp.Close()
	}()
	writer := bufio.NewWriter(fp)
	log.Println("path", this.Path)
	if this.Path == "." {
		dir, err := os.Getwd()
		if err != nil {
			log.Println("Get Present Path file", err)
			return
		}
		this.Path = dir
	}
	log.Println("path", this.Path)

	buf = `#!/bin/sh
### BEGIN INIT INFO
# Provides:          rsdog
# 凝思平臺重啟守護

OPDIR=` + this.Path + "\n\n" +
		`
dir=$OPDIR
sleep 60
job=` + "`" + `pidof $OPDIR/g` + "`" + `
pid="$job"

# 進行殺死,重新啟動
kill -9 $pid
$dir/g >/dev/null 2>&1 &

`
	writer.WriteString(buf)
	writer.Flush()

	err = exec.Command("/bin/sh", "-c", "chmod +x " + shellName).Run()
	if err != nil {
		log.Println(err)
	}

	err = exec.Command("/bin/sh", "-c", "cd  /etc/init.d/ && chkconfig --add rsdog").Run()
	if err != nil {
		log.Println(err)
	}
}