質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • Linux

    4512questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • Django

    1688questions

    DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

  • Gunicorn

    29questions

    Gunicorn (Green Unicorn)は、Rubyのunicornをベースに開発されたUNIX向けのPython製HTTPサーバです。他のライブラリとの依存関係がないため、容易にインストールして使用できます。

[質問] systemd ExecStartPre=source file でエラーになってしまう

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 367

roswell

score 5

yama@jpx20120007:~$ lsb_release -a
No LSB modules are available.
Distributor ID:    LinuxMint
Description:    LMDE 3 Cindy
Release:    3
Codename:    cindy


の環境の systemdで、virtualenv の activate

ExecStartPre=source /home/yama/reminiscense/venv/bin/activate


を実行すると、

[/etc/systemd/system/reminiscence.service:14] Executable path is not absolute, ignoring: source /home/yama/reminiscense/venv/bin/activate


となってしまいます。
対処方法をご教示頂けますでしょうか?
ちなみに、systemd ではなく、コマンドラインより、
WorkingDirectoryにて、ExecStartPre及び、ExecStart を手動実行すると、
動作します。

下記が、systemdでの実行結果の詳細になります。

yama@jpx20120007:~$ cat /etc/systemd/system/reminiscence.service 
[Unit]
Description="reminiscence systemctl setting file'

# for gunicorn
[Service]
User=yama
WorkingDirectory=/home/yama/reminiscence/venv/reminiscence
ExecStartPre=source /home/yama/reminiscense/venv/bin/activate
ExecStart=/home/yama/reminiscence/venv/bin/gunicorn --daemon --max-requests 100 --worker-class gthread --workers 2 --thread 5 --timeout 300 --bind 0.0.0.0:8000 reminiscence.wsgi

[Install]
WantedBy=multi-user.target

yama@jpx20120007:~$ sudo systemctl stop reminiscence
Warning: reminiscence.service changed on disk. Run 'systemctl daemon-reload' to reload units.

yama@jpx20120007:~$ sudo systemctl daemon-reload

yama@jpx20120007:~$ sudo systemctl stop reminiscence

yama@jpx20120007:~$ sudo systemctl start reminiscence

yama@jpx20120007:~$ sudo systemctl status reminiscence
● reminiscence.service - "reminiscence systemctl setting file'
   Loaded: loaded (/etc/systemd/system/reminiscence.service; disabled; vendor preset: enabled)
   Active: inactive (dead)

...
12月 24 17:56:48 jpx20120007.ifs.sony.co.jp systemd[1]: Started "reminiscence systemctl setting file'.
12月 24 17:56:52 jpx20120007.ifs.sony.co.jp systemd[1]: [/etc/systemd/system/reminiscence.service:14] Executable path is not absolute, ignoring: source /home/yama/reminiscense/venv/bin/activate

yama@jpx20120007:~$ cat /home/yama/reminiscence/venv/bin/activate
# This file must be used with "source bin/activate" *from bash*
# you cannot run it directly

deactivate () {
    unset -f pydoc >/dev/null 2>&1

    # reset old environment variables
    # ! [ -z ${VAR+_} ] returns true if VAR is declared at all
    if ! [ -z "${_OLD_VIRTUAL_PATH+_}" ] ; then
        PATH="$_OLD_VIRTUAL_PATH"
        export PATH
        unset _OLD_VIRTUAL_PATH
    fi
    if ! [ -z "${_OLD_VIRTUAL_PYTHONHOME+_}" ] ; then
        PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME"
        export PYTHONHOME
        unset _OLD_VIRTUAL_PYTHONHOME
    fi

    # This should detect bash and zsh, which have a hash command that must
    # be called to get it to forget past commands.  Without forgetting
    # past commands the $PATH changes we made may not be respected
    if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then
        hash -r 2>/dev/null
    fi

    if ! [ -z "${_OLD_VIRTUAL_PS1+_}" ] ; then
        PS1="$_OLD_VIRTUAL_PS1"
        export PS1
        unset _OLD_VIRTUAL_PS1
    fi

    unset VIRTUAL_ENV
    if [ ! "${1-}" = "nondestructive" ] ; then
    # Self destruct!
        unset -f deactivate
    fi
}

# unset irrelevant variables
deactivate nondestructive

VIRTUAL_ENV="/home/yama/reminiscence/venv"
export VIRTUAL_ENV

_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH

# unset PYTHONHOME if set
if ! [ -z "${PYTHONHOME+_}" ] ; then
    _OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME"
    unset PYTHONHOME
fi

if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then
    _OLD_VIRTUAL_PS1="$PS1"
    if [ "x" != x ] ; then
        PS1="$PS1"
    else
        PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1"
    fi
    export PS1
fi

# Make sure to unalias pydoc if it's already there
alias pydoc 2>/dev/null >/dev/null && unalias pydoc

pydoc () {
    python -m pydoc "$@"
}

# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands.  Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then
    hash -r 2>/dev/null
fi
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

0

>/etc/systemd/system/reminiscence.serviceをルート(/)からの完全なパス(絶対パス)に書き換えると解決するのではないでしょうか。

は、/ から始まっているので、絶対パスで、

問題は

'''
12月 24 17:56:52 jpx20120007.ifs.sony.co.jp systemd[1]: [/etc/systemd/system/reminiscence.service:14] Executable path is not absolute, ignoring: source /home/yama/reminiscense/venv/bin/activate
'''

の ignoring: 部分
source /home/yama/reminiscense/venv/bin/activate 
なのです。

その後、検索して
(https://unix.stackexchange.com/questions/274861/systemd-bash-builtins/274869#274869)
っぽいかなと思い、真似て、

'''
ExecStart=/bin/bash -c 'source /home/yama/reminiscence/venv/bin/activate;/home/yama/reminiscence/venv/bin/gunicorn --daemon --max-requests 100 --worker-class gthread --workers 2 --thread 5 --timeout 300 --bind 0.0.0.0:8000 reminiscence.wsgi'
'''
で、動作するようになりました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

エラーメッセージは、[/etc/systemd/system/reminiscence.service:14] Executable path is not absolute (実行パスが絶対パスになっていない(相対パスではダメ!)という内容なので、
/etc/systemd/system/reminiscence.serviceをルート(/)からの完全なパス(絶対パス)に書き換えると解決するのではないでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • Linux

    4512questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • Django

    1688questions

    DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

  • Gunicorn

    29questions

    Gunicorn (Green Unicorn)は、Rubyのunicornをベースに開発されたUNIX向けのPython製HTTPサーバです。他のライブラリとの依存関係がないため、容易にインストールして使用できます。