私は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
問題が発生した場合にデバッグするのが簡単になることが含まれます。