ヘッドレスサーバーのdavmail systemdランチャー

ヘッドレスサーバーのdavmail systemdランチャー

私はArchWikiガイドに従って書くことを試みています。カスタムサービスファイル発表DAFメールシステム全体のデーモンとして機能します。過去には ~/.xinitrc に次のような行がありました。

nohup /usr/bin/davmail /etc/conf.d/davmail.properties

DavMailの指示に従ってください(/usr/bin/davmailシンボルリンクはどこにありますか/usr/share/java/davmail/davmail.sh?)。今私のコンピュータをヘッドレスサーバーに切り替えたので、自動イニシエータはXセッションとは無関係になりたいです。

DavMail initスクリプトについてオンラインで見たすべてのガイドは、ディストリビューションがsystemdではなくsysvinitを使用していると仮定しています。 systemdサービスファイルをカスタマイズする私の試みは次のとおりです。

[Unit]
Description=DavMail Exchange Gateway
Requires=network.target
After=network.target

[Service]
Type=forking
RemainAfterExit=yes
ExecStart=/usr/bin/davmail /etc/conf.d/davmail.properties
ExecStop=killall davmail

[Install]
WantedBy=multi-user.target

正しくフォークできません。 systemdが無効な引数について文句を言うので、ExecStartコマンドプレフィックスを付ける/usr/bin/nohupことは役に立ちません(以前のフォーラムの答えを正しく理解した場合は、デーモン自体を制御することをお勧めします)。サービスタイプをoneshotまたはに変更してsimpleも失敗します。

ここで1つの問題は、DavMailを実行するにはJavaインタプリタが必要であり、systemdサービスファイルはJavaインタプリタにタスクを渡すシェルスクリプトほど柔軟ではないということです。しかし、たぶんもっと簡単な説明があるかもしれません。共有したいDavMail用のシステムサービスファイルを正常に作成した人はいますか?

答え1

これを単純なサービスとして定義する必要があります(ポーキングは、デーモンがすでに起動されたときに完了するプロセスのためのものです)。 Archでは魅力のように動作するので

[Unit]
Description=DavMail Exchange Gateway
Requires=network.target
After=network.target

[Service]
Type=simple
RemainAfterExit=no
ExecStart=/usr/bin/davmail /etc/conf.d/davmail.properties
ExecStop=killall davmail

[Install]
WantedBy=multi-user.target

答え2

Debianやそれに基づいたディストリビューションがなく、一般的なLinux(その他)パッケージ(davmail.shを含む)をダウンロードした人には、次のことが役立ちました。

[Unit]
Description=DavMail Exchange Gateway
Requires=network.target
After=network.target

[Service]
Type=forking
PIDFile=/opt/davmail/davmail.pid
ExecStart=/opt/davmail/davmail.sh /opt/davmail/davmail.properties

[Install]
WantedBy=multi-user.target

答え3

davmail.server=trueいくつかの実験の終わりに手動インストールを実行したという前提で、コマンドと一緒にDavmailを使用するより良いソリューションを見つけました。

[Unit]  
Description=DavMail Exchange Gateway  
Requires=network.target  
After=network.target  

[Service]  
Type=simple  
RemainAfterExit=no  
GuessMainPid=yes  
Environment=BASE=<< YOUR_MANUAL_INSTALL_PATH_HERE >>  
Environment=PROPERTIES=<< PATH_TO_davmail.properties >>
ExecStartPre=/usr/bin/bash -c "for i in ${BASE}/lib/*; do /usr/bin/systemctl set-environment CLASSPATH=${CLASSPATH}:$i ; done"  
ExecStart=/usr/bin/java -Xms1G -Xmx1G -XX:ErrorFile=/var/log/davmail_errors.log -XX:-HeapDumpOnOutOfMemoryError -Djava.awt.headless=true -Dsun.net.inetaddr.ttl=60 -cp ${BASE}/davmail.jar:${CLASSPATH} davmail.DavGateway ${PROPERTIES}  
ExecReload=/bin/kill -HUP ${MAINPID}  
ExecStop=/bin/kill -QUIT ${MAINPID}  
Restart=always  
RestartSec=3  

[Install]  
WantedBy=multi-user.target

パッケージのインストールを実行したユーザーの場合は、「ExecStartPre」行をコメントアウトしてから、BASE = / usr / share / javaとPROPERTIES = / etc / davmail.propertiesを設定できます。

/var/log/syslogこれが「より良い」理由には、デフォルトのsyslogの場所(||||どこにいても)にJavaプロセスコンソールの出力が表示され、/var/log/messages問題が発生した場合にデバッグするのが簡単になることが含まれます。

関連情報