
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が設定されていないため、PATH
PATHを設定するか、各コマンドにフルパスを提供する必要があります(例:)/bin/sleep
。
代わりにログファイルをsystemd
使用することもできます。この場合はにjournald
置き換えます。logger
systemd-cat