我正在尝试在 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
而不是日志文件。在这种情况下,您将替换logger
为systemd-cat
.