シェルランチャーが実行中であることを確認する

シェルランチャーが実行中であることを確認する

Ubuntuで次のシェル実行可能ファイルが実行されていることを確認できますか?実行可能ファイル名はですibgateway。を実行すると、htop次のコマンドが表示され、現在実行中であることを意味します。

 /bin/sh -c nohup "/home/user1/Jts/ibgateway/978/ibgateway" "-J-DCHANNEL=latest" "-J-DchannelChanged=false" "-J-DjtsConfigDir=/home/user1/Jts" "-J-Drestart=jdapbbikegkmhgpnhhk

私はこれを試しましたが、実行にもかかわらずpgrep ibgateway何も返しません。ibgateway上記のプロセスが端末で実行されていることを確認する方法を探しています。

修正する

user1@SFO:~$ cat /proc/11965/comm
sh

user1@SFO:~$ cat /proc/11965/cmdline
/bin/sh-cnohup "/home/user1/Jts/ibgateway/978/ibgateway" "-J-DCHANNEL=latest" "-J-DchannelChanged=false" "-J-DjtsConfigDir=/home/user1/Jts" "-J-Drestart=jdapbbikegkmhgpnhhkpeglncdomifcjhpdimcbe"  > /dev/null 2>&1

ベストアンサー1

あなたのコマンドは次のようになります。

/bin/sh -c 'nohup "/home/user1/Jts/ibgateway/978/ibgateway" '\
'"-J-DCHANNEL=latest" "-J-DchannelChanged=false" '\
'"-J-DjtsConfigDir=/home/user1/Jts" '\
"-J-Drestart=jdapbbikegkmhgpnhhk"'

これらはすべて"保護する特殊文字がないため不要です。最後に一人も抜けましたね。

考えられる解決策

システムD

この問題を解決する最善の方法は、おそらくSystemDを使用することです。ユニットファイルを作成し、を使用してサービスを開始しsystemctl start ibgateway.service、を使用してステータスを照会しますsystemctl status ibgateway.service。いいえsh、 'nohup'は必要ありません。

ユニットファイルを作成する必要もなく、systemd-runroot以外のユーザーとして次のものを使用できます。

$ systemd-run --user ./testscript.sh
Running as unit: run-r1422e75c673a4439aaacefd0df118a51.service

$ systemctl --user status run-r1422e75c673a4439aaacefd0df118a51.service
● run-r1422e75c673a4439aaacefd0df118a51.service - /home/hl/tmp/./testscript.sh
     Loaded: loaded (/run/user/1000/systemd/transient/run-r1422e75c673a4439aaacefd0df118a51.service; transient)
  Transient: yes
     Active: active (running) since Sat 2020-08-08 02:36:57 CEST; 26s ago
   Main PID: 7740 (testscript.sh)
     CGroup: /user.slice/user-1000.slice/[email protected]/run-r1422e75c673a4439aaacefd0df118a51.service
             ├─7740 /bin/bash /home/hl/tmp/./testscript.sh
             └─7742 sleep 100

運行状態確認

最良の方法は次のとおりです。

$ systemctl show dracut-shutdown.service | grep -e ActiveState -e SubState       
ActiveState=active
SubState=exited

$ systemctl show display-manager.service | grep -e ActiveState -e SubState
ActiveState=active
SubState=running

だからあなたはできますgrepSubState=runningそしてActiveState=activeクリーンなソリューション)。

おすすめ記事