如何指定 /etc/init.d/mysqld 所加载的配置文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何指定 /etc/init.d/mysqld 所加载的配置文件相关的知识,希望对你有一定的参考价值。

参考技术A 没办法直接修改mysqld 的linux 默认参数文件位置,你直接在mysqld 的参数中用 --init-file=file_name
或者重新修改编译mysql的C源文件。

或者在你的 /etc/init.d 不要直接放 mysqld ,面是放个脚本命令 mysql --init-file=file_name

如何检测网络何时在 /etc/init.d 脚本中初始化?

【中文标题】如何检测网络何时在 /etc/init.d 脚本中初始化?【英文标题】:How to detect when networking initialized in /etc/init.d script? 【发布时间】:2013-12-27 00:40:39 【问题描述】:

我有一个 /etc/init.d/ 脚本,该脚本在启动时启动并且需要联网。我将 rc start 设置为 99,所以它是加载的最后一件事,但网络不会立即加载,我目前不得不依靠 30 秒的睡眠命令来等待网络加载。

操作系统是针对嵌入式系统(Yocto 项目)修改的 Ubuntu。文件系统是一样的,但服务非常有限,所以它使用的是 Sysvinit。

有没有办法检查所有网络是否已完成加载?

如果有帮助,这里是脚本:

#!/bin/sh
#
# Daemon Name: blerd
#  
# chkconfig: - 3 99 1
# description: M3 Bluetooth Low Energy Relay Daemon

# Source function library.
. /etc/init.d/functions

PROGRAM=bler
LOCKFILE=/var/lock/subsys/$PROGRAM

start()  
    [ -x $EXE ] || exit 5

    echo -n "Starting $PROGRAM: ";

    if [ -e $LOCKFILE ]; then
        echo "Instance of $PROGRAM exists."
        return 0;
    fi

    sleep 30
    $PROGRAM
    RETVAL=$?
    if [ $RETVAL -eq 0 ]; then
        echo "Success"
    else
        echo "Failed"
    fi

    [ $RETVAL -eq 0 ] && touch $LOCKFILE
    return $RETVAL


stop() 
    echo -n "Stopping $PROGRAM: "

    if [ ! -e $LOCKFILE ]; then
        echo "No instance of $PROGRAM exists."
        return 0;
    fi

    killproc $PROGRAM
    RETVAL=$?
    if [ $RETVAL -eq 0 ]; then
        echo "Success"
    else
        echo "Failed"
    fi

    [ $RETVAL -eq 0 ] && rm -f $LOCKFILE
    return $RETVAL


status() 
    echo -n "Status $PROGRAM: "
    if [ -e $LOCKFILE ]; then
        echo "Running"
    else
        echo "Stopped"
    fi
    return 0;


# See how we were called.
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        status
        ;;
    *)
        echo "Usage: $0 start|stop|status|restart"
        exit 2
        ;;
esac

【问题讨论】:

这篇文章被标记为ubuntu,但看起来像是 RHEL 的 SysVinit 脚本。 它适用于具有 Ubuntu (Yocto Project) 修改版本的嵌入式系统。为简单起见,我为 RH 格式化了描述文本,但它实际上不是 RH。 【参考方案1】:

Debian 的基本方式

基本上/etc/network/if-up.d 是放置此类脚本的地方。这些脚本在 Debian 系统或衍生系统(如 Ubuntu)上启动时调用。在这里,您可以找到传递给这些脚本的环境变量列表。使用这些变量,您可以决定启动哪个接口以及接口配置的详细信息。在查看 /etc/network/if-up.d 时,您可能会发现此类 scipts 的示例

示例脚本可能如下所示(源自 samba 包。只是为了解释事情是如何工作的。如果您使用的是 Ubuntu,则应该使用 upstart 稍后会解释)

/etc/network/if-up.d/your-service

#!/bin/sh
# Try to bring nmbd up when an interface comes up, if smbd is already running.

# Don't bother to do anything for lo.
if [ "$IFACE" = lo ]; then
    exit 0
fi

# Only run from ifup.
if [ "$MODE" != start ]; then
    exit 0
fi

# we only care about inet and inet6.
case $ADDRFAM in
    inet|inet6|NetworkManager)
        ;;  
    *)  
        exit 0
        ;;  
esac


# start the service
invoke-rc.d your-service start >/dev/null

exit 0

注意你需要

chmod +x /etc/network/if-up.d/your-service

Ubuntu / 新贵

Ubuntu 正在使用 upstart 作为 sysvinit 替代品。如果您正在查看/etc/network/if-up.d/,您会看到upstart 也在那里放置了一个钩子。这个钩子是更详细的upstart 机制的基础,它提供了启动服务的可能性,除非已经启动了某个网络接口。 upstart 钩子将触发事件net-device-up 并传递IFACELOGICALADDRFAMMETHOD 作为参数。您在 upstart 脚本中为您的服务使用这个钩子(就像@Guy 提到的那样):

start on net-device-up IFACE=eth0

【讨论】:

【参考方案2】:

如果您使用的是 Ubuntu,因为这个问题已被标记,请考虑使用 Ubuntu upstart

除了非常简单之外,您还可以:

start on net-device-up IFACE=eth0

欲了解更多信息,请参阅完整的upstart cookbook

【讨论】:

以上是关于如何指定 /etc/init.d/mysqld 所加载的配置文件的主要内容,如果未能解决你的问题,请参考以下文章

linux下/etc/init.d的简单介绍

命令行怎么重启ssh,用/etc/init.d/ssh restart不行

linux中/etc/init.d设置开机启动

inittab语法,下面这句话是啥功能 sysinit:/etc/init.d/rcs

linux下yum安装的mysql,/etc/init.d/没有mysql怎么办?

linux 下xinetd和/etc/init.d里的服务不一样吗?为啥要设置这两个?