Debian 起動スクリプトを起動できません

Debian 起動スクリプトを起動できません

Debian から起動時に特定のスクリプトをロードしようとしています。
/etc/rc.localにスクリプトを配置しようとしましたが、成功しませんでした。
これで、特定のスクリプトを実行するサービススクリプトを作成しました。サービススクリプトのコードは次のとおりです。

#!/bin/sh
### BEGIN INIT INFO
# Provides:          script
# Required-Start:    $local_fs $network $named $time $syslog
# Required-Stop:     $local_fs $network $named $time $syslog
# Default-Start:     5
# Default-Stop:      0 1 6
# Short-Description: Start script at boot time
# Description:       Enable service .
### END INIT INFO

case "$1" in
  start)
    echo "Starting script"
    /usr/local/bin/script1
    ;;
  stop)
    echo "Stopping script"
    ;;
  *)
    echo "Usage: /etc/init.d/script {start|stop}"
    exit 1
    ;;
esac

exit 0

これで、私のスクリプトがサービスとして実行されているかどうかをテストできます。sudo service <script> start

私のコード/usr/local/bin/script1は次のとおりです

#!/bin/sh

exec 5> >(logger -t $0)
BASH_XTRACEFD="5"
PS4='$LINENO: '
set -x

FILE=/share/_ngrok
NAO_ESTA_ESCRITO=0

touch $FILE
/usr/local/bin/ngrok tcp 22 --region eu > /dev/null &
sleep 5
URL=`/usr/local/bin/ngrok_url`
grep -q -F "$URL" $FILE || NAO_ESTA_ESCRITO=1
if [ $NAO_ESTA_ESCRITO -eq 1 ]; then
  /usr/local/bin/ngrok_url > $FILE
  /usr/bin/drive push -no-prompt -quiet $FILE
fi
exit 0

bashで実行すると/usr/local/bin/script1正常に実行されますが、実行するとsudo service servicescript startそうではありません。しかし、これはsudo service servicescript otherarg正常に実行されるため、サービススクリプトは正常に設定されます。ただstartサービスが機能しないということです。
これを行うと、sudo service servicescript start次のエラーが発生します。

script.service 操作が失敗しました。詳細については、「systemctl status script.service」および「journalctl -xn」を参照してください。

これを行うと、systemsctl status script.service次のメッセージが表示されます。

● script.service - INFO
ロード済み: ロード済み (/etc/systemd/system/script.service; 有効)
アクティビティ: Qui 2017-03-23 17:19:25 WET 以降失敗しました (結果:終了コード)。 35秒前の
プロセス: 7710 ExecStop=/usr/local/bin/killscript (コード=終了、ステータス=0/SUCCESS)
プロセス: 11689 ExecStart=/usr/local/bin/script1(コード=終了、ステータス=2)
マスターPID:11689(コード=終了、ステータス=2)

ベストアンサー1

3つの初期化システムをすべて混合しているようです。

  • システム初期化/etc/init.d/daemon start/stop/restart
  • 突然現れるservice daemon start
  • システムsystemsctl status script.service

initお使いのシステムが何であるかをご覧ください

 stat /proc/1/exe    

ファイル: '/proc/1/exe' -> '/lib/systemd/systemd'

したがって、systemdは最新の新しい標準です。

これを行う方法へのリンクは次のとおりです。 システムLinuxで起動時にシェルスクリプトを自動的に実行する方法

非対話型シェルにはenvが設定されていないため、PATHPATHを設定するか、各コマンドにフルパスを提供する必要があります(例:)/bin/sleep

代わりにログファイルをsystemd使用することもできます。この場合はにjournald置き換えます。loggersystemd-cat

おすすめ記事