【问题标题】:Init Script Not Running On System Reboot/Shutdown系统重新启动/关闭时未运行初始化脚本
【发布时间】:2015-12-05 07:30:12
【问题描述】:

我在 /etc/init.d/redis-snapshot 的文件中创建了一个 bash 初始化脚本:

#!/bin/bash

### BEGIN INIT INFO
# Provides:          redis-snapshot
# Required-Start:    $local_fs $syslog Stime redis-server
# Required-Stop:     $local_fs $syslog $time redis-server
# Default-Start:     0 6
# Default-Stop:      2 3 4 5
# Short-Description: Backup redis data on system exit
# Description:       redis-snapshot is a simple bash script to dump redis data
#                    to disk whenever the system shuts down or reboots.
### END INIT INFO

# path to script log file
ACTIVITYLOG='/home/noman/Desktop/redis-snapshot.log'

# create/touch log file
touch $ACTIVITYLOG

# invoke the save command on redis-cli
# this will dump all in-memory data to disk
OUTPUT="$(redis-cli SAVE)"

echo -e "$(date +'%Y-%m-%d %H:%M:%S %Z')\tSnapshoting Redis Data To Disk" >> $ACTIVITYLOG
echo -e "$(date +'%Y-%m-%d %H:%M:%S %Z')\tRedis says $OUTPUT" >> $ACTIVITYLOG

# end - nothing to do

我正在使用以下命令使其在系统重启和关机时运行:

sudo update-rc.d redis-snapshot start 99 0 6 .

由于某种原因它不起作用,我不知道下一步该尝试什么。

有什么好主意吗?

【问题讨论】:

  • 这是适合您的发行版的命令吗?这是否更新了/etc/rc#.d 目录中的正确链接?此时您的发行版是否使用初始化脚本?还是转移到upstartsystemd
  • @EtanReisner 我在 Ubuntu 14 上。我执行的命令确实表明在 rc 目录中设置了正确的链接
  • 看到正确的链接吗? Ubuntu 14 不是使用upstart 而不是sysvinit 吗?那么您不应该使用与upstart 相关的适当命令来代替update-rc.d 吗? (或者update-rc.d 也适用于upstart?)

标签: linux bash shell redis init


【解决方案1】:

您的底层发行版和发行版是什么? 试试

chkconfig --add redis-snapshot

【讨论】:

    【解决方案2】:

    如果您想特别了解您的脚本是否运行,您可以尝试跳过输出重定向到文件,这样您会在启动期间看到它或在启动后检查/var/log/boot.log

    如果缺少输出,则说明您的脚本未添加到 /etc/rc#.d

    在启动时运行脚本的另一种方法(我更喜欢)是通过/etc/rc.local。例如:

    bash /root/script.sh
    exit 0
    

    【讨论】:

      最近更新 更多