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

当我/usr/local/bin/script1从 bash 运行时,它运行成功,但当我运行时,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 - 信息
已加载:已加载(/etc/systemd/system/script.service;已启用)
活动:自 Qui 2017-03-23 17:19:25 WET 起失败(结果:退出代码); 2 分钟 35 秒前
进程:7710 ExecStop=/usr/local/bin/killscript (code=exited, status=0/SUCCESS)
进程:11689 ExecStart=/usr/local/bin/script1(代码=已退出,状态=2)
主PID:11689(代码=已退出,状态=2)

答案1

看起来您正在混合所有三个初始化系统:

  • 系统初始化/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 是最新的新标准。

这是操作方法的链接: 如何在systemd Linux上启动时自动执行shell脚本

请记住,非交互式 shell 没有设置 env,例如PATH,您需要设置 PATH 或为每个命令提供完整路径,例如/bin/sleep

使用时systemd您可能想使用journald而不是日志文件。在这种情况下,您将替换loggersystemd-cat.

相关内容