systemdを使ってサービスを作成しました。サービスファイルは次のとおりです。
Description=Contents Copy Copier
[Service]
Type=forking
Restart=always
User=root
ExecStart=/usr/local/bin/ccCopier /etc/ccCopier.cfg
KillMode=none
ExecStop=/usr/bin/mysql -u root -proot ContentsCopy -e "update stock set Copier= 'quiesce' where Stock='`/usr/bin/hostname`'"
[Install]
WantedBy=multi-user.target
コマンドラインからExecStopコマンドを実行すると、正常に実行されます。ただし、systemctl stopを実行すると機能しません。なぜこれが起こるのかわかりません。
答え1
バックティック記号はシェルによって拡張されます。 systemdはシェルでコマンドを実行しないため、この表記法は使用できません。この行を次に置き換えることができます。
ExecStop=/bin/bash -c '/usr/bin/mysql -u root -proot ContentsCopy -e "update stock set Copier= \'quiesce\' where Stock=\'`/usr/bin/hostname`\'"'