🤔
【未解決】serviceコマンドの結果を英語で出力する
はじめに
目的
init.dで管理されているサービスにおいて、起動しているサービス一覧の出力を英語にしたい。
service --status-all
環境情報
- OS
CentOS 6
※古いですが、目を瞑ってください - ロケール
ja_jp - 備考
SSHにて実行しています。
実施したこと
基本は、通常実行するコマンドの頭に、「LANG=C」を付ければ一時的に結果の出力を変えることが出来ます。
- 通常通り実行した場合
$ date
2023年 3月 17日 金曜日 19:07:55 JST
- 頭に"LANG=C"を付けて実行した場合
$ LANG=C date
Fri Mar 17 11:08:00 JST 2023
上記同様、serviceコマンドを使って出力しようとすると、以下のように出力が変わらないです。
- 通常通り実行した場合
# service ntpd status
ntpd (pid XXXX) を実行中...
- 頭に"LANG=C"を付けて実行した場合
# LANG=C service ntpd status
ntpd (pid XXXX) を実行中...
ということで、掘り下げて調べてみます。
/sbin/service
#!/bin/sh
# Set up a default search path.
PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin"
export PATH
VERSION="`basename $0` ver. 0.91"
USAGE="Usage: `basename $0` < option > | --status-all | \
[ service_name [ command | --full-restart ] ]"
SERVICE=
SERVICEDIR="/etc/init.d"
OPTIONS=
(中略)
if [ -z "${SERVICE}" -a $# -eq 1 -a "${1}" = "--status-all" ]; then
(略)
if [ -x "${SERVICEDIR}/${SERVICE}" ]; then
env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" "${SERVICEDIR}/${SERVICE}" status
fi
;;
esac
done
(以下略)
今回、serviceコマンドでstatusを用いているので、「env -i LANG=...」の部分にあたります。
「env -i」は環境変数が設定されていない状態でコマンドを実行するオプションなので、
このオプションが機能しているのでロケールが変わらないんですね。。。
おわりに
serviceコマンドのshも書き換えたくないので、模索してましたが、
サービスが起動していると「(pid XXXX)」と出るため、
取り急ぎは以下のような形で対応しました。
もはやこれが正解なんでしょうか・・・?
service --status-all |grep "pid" |awk '{print $1}'
systemdだと簡単にできるから楽なんですけどね・・・
Discussion