2016-09-06 7 views
1

CentOS 6.8で私はコマンドgo run main.goで実行されるgolangアプリケーションを持っています。サービスhttpdを起動するためにシステムサービスを作成する必要があります。
私は/etc/rc.d/init.d/httpdのようなファイルを作成しなければならないことを知っていますが、そのコマンドを実行する方法はわかりません。サービスでgoアプリケーションを実行する

+0

これはあなたを手助けするはずです:http://unix.stackexchange.com/questions/236084/how-do-i-create-a-service-for-a-shell-script-so-i-can-start-and -stop-it-like-ad – AJPennster

+0

ゴランアプリはウェブアプリまたはシステムアプリを意味しますか? –

+0

@KyawMyintThein web app –

答えて

0

まず、Goバイナリをビルドしてパスの下に置く必要があります。

go install main.go 

ないあなたの「メイン」ファイルがメインと呼ばれている場合に、go installはあなたのパスの下に、メインと呼ばれるバイナリが配置されます。だから私はあなたのプロジェクト/サーバーと呼ぶものにあなたのファイルの名前を変更することをお勧めします。

mv main.go coolserver.go 
go install coolserver.go 

coolserverを実行すると、すべて正常であることを確認できます。 $ GOPATHを正しく設定してもらえますか?

<NAME> = coolserver 
<DESCRIPTION> = Describe your service here (be concise) 
<COMMAND> = /path/to/coolserver 
<USER> = Login of the system user the script should be run as 

スタートし、テストを置き換えることを忘れないでください

cp "service.sh" "/etc/init.d/coolserver" 
chmod +x /etc/init.d/coolserver 

:そして、ここでそれは/etc/init.dのためにservice.sh

#!/bin/sh 
### BEGIN INIT INFO 
# Provides:   <NAME> 
# Required-Start: $local_fs $network $named $time $syslog 
# Required-Stop:  $local_fs $network $named $time $syslog 
# Default-Start:  2 3 4 5 
# Default-Stop:  0 1 6 
# Description:  <DESCRIPTION> 
### END INIT INFO 

SCRIPT=<COMMAND> 
FLAGS="--auth=user:password" 
RUNAS=<USERNAME> 

PIDFILE=/var/run/<NAME>.pid 
LOGFILE=/var/log/<NAME>.log 

start() { 
    if [ -f /var/run/$PIDNAME ] && kill -0 $(cat /var/run/$PIDNAME); then 
    echo 'Service already running' >&2 
    return 1 
    fi 
    echo 'Starting service…' >&2 
    local CMD="$SCRIPT $FLAGS &> \"$LOGFILE\" & echo \$!" 
    su -c "$CMD" $RUNAS > "$PIDFILE" 
    echo 'Service started' >&2 
} 

stop() { 
    if [ ! -f "$PIDFILE" ] || ! kill -0 $(cat "$PIDFILE"); then 
    echo 'Service not running' >&2 
    return 1 
    fi 
    echo 'Stopping service…' >&2 
    kill -15 $(cat "$PIDFILE") && rm -f "$PIDFILE" 
    echo 'Service stopped' >&2 
} 

uninstall() { 
    echo -n "Are you really sure you want to uninstall this service? That cannot be undone. [yes|No] " 
    local SURE 
    read SURE 
    if [ "$SURE" = "yes" ]; then 
    stop 
    rm -f "$PIDFILE" 
    echo "Notice: log file is not be removed: '$LOGFILE'" >&2 
    update-rc.d -f <NAME> remove 
    rm -fv "$0" 
    fi 
} 

case "$1" in 
    start) 
    start 
    ;; 
    stop) 
    stop 
    ;; 
    uninstall) 
    uninstall 
    ;; 
    retart) 
    stop 
    start 
    ;; 
    *) 
    echo "Usage: $0 {start|stop|restart|uninstall}" 
esac 

コピーと呼ばinit.dディレクトリサービスの一例ですあなたのサービスとインストールサービスは起動時に実行されます:

service coolserver start 
service coolserver stop 
update-rc.d coolserver defaults 

+0

。それは問題です、CentOS 6.8はsystemdを持っていません。 あなたの 'systemctl'コードは動作しません。 –

+0

今はどうですか?@AliCoder? – CESCO

+0

はい、それは 'update-rc.d coolserver defaults'が私に' update-rc.dコマンドが見つかりません 'という問題を持っています。どうすれば '--auth'のようなパラメータを入れることができますか?user:password" ' –

-1

あなたはApache Webサーバーを使用しようとしたと仮定します。実際には、Go Webサーバーで十分です。主な目的は、システムサービスでGo Webサーバーを実行することです。tmuxhttps://tmux.github.io/またはnohupをシステムサービスとして実行することができます。また、Apacheまたはnginx Webサーバーをプロキシとして使用することもできます。

+0

私はhttpdを例として挙げましたが、もちろんGoウェブサーバーで十分です。 私が必要とするのは、centos 6のサービスファイルを作成してアプリケーションを実行することです。 https://github.com/jpillora/cloud-torrent/wiki/Installationのようなものですが、centos 6ではsystemdがないためです。 –

関連する問題