设置命令在启动时执行+设置每日重启 - Ubuntu

时间:2015-05-04 12:23:08

标签: linux ubuntu command server boot

我已经探索了完成这两项工作的选项,但是没有明确的方法可供我实施。

我想做的是:

  • 首先,我希望我的ubuntu服务器在特定时间每天重启一次。
  • 启动时,我希望它能够作为特定用户自动执行2个命令
  • 第二个命令必须保持活动状态(因此不会退出或退出)

这些是详细信息:

  • 用户被称为" steam"
  • 命令1: cd steamcmd / css
  • 命令2: ./ srcds_run -game cstrike -maxplayers 12 - port 27015 + map map_name

非常感谢帮助,

由于

3 个答案:

答案 0 :(得分:1)

要重新启动服务器,您可以使用crontab(https://askubuntu.com/questions/2368/how-do-i-set-up-a-cron-job),将其时间设置为一天并编写脚本以执行重新启动。要在启动时运行命令,您还可以使用init.d或任何其他方法( https://askubuntu.com/questions/48321/how-do-i-start-applications-automatically-on-login)因为第二个命令是应用程序,它将保持活动状态。

答案 1 :(得分:0)

所有这些行动都可以通过cron完成。

  • 在特定时间重启(在系统crontab中,为了指定用户):

    20 7 * * *  root   shutdown -r now
    

    另外,如果你想从用户crontab执行此操作,则必须使用sudo启动命令(并且应该禁用该操作的请求密码);或者只是将此命令添加到root的crontab中。

  • 在cron守护程序启动时启动所需的命令(即在系统重启后)。添加到用户的crontab(或系统一,但指定所需的用户名):

    @reboot cd steamcmd/css && ./srcds_run -game cstrike -maxplayers 12 - port 27015 +map map_name
    

    上一个命令将保持活动状态。

顺便说一下,对于cron / at jobs来说,最好使用绝对目录路径,而不是相对路径。因此,用绝对路径替换“steamcmd / css”会更好。

您可以在此处找到更多详细信息:http://manpages.ubuntu.com/manpages/precise/man5/crontab.5.html

答案 2 :(得分:0)

要做到这一点,我们应该创建服务init.d脚本,以便能够在任何时候控制我们的应用程序。

警告:本指南仅适用于Ubuntu,可能是debian 而不是start-stop在RedHat系统系列和克隆上使用systemd守护进程

下面的一个小指南(sds - Source Dedicated Server,缺乏幻想:)):

  1. 使用以下内容创建文件/etc/init.d/sds:
  2. #!/bin/bash
    
    ### BEGIN INIT INFO
    # Provides:          sds
    # Required-Start:
    # Required-Stop:
    # Default-Start:
    # Default-Stop:
    # Short-Description: Control Source Dedicated Server
    ### END INIT INFO
    
    DAEMON_NAME="Source Dedicated Server"
    WORKDIR="steamcmd/css"
    CMD="./srcds_run -game cstrike -maxplayers 12 - port 27015 +map map_name"
    USER=steam
    PIDFILE=/var/run/sds.pid
    
    
    daemon_status(){
      start-stop-daemon --status --quiet --pidfile $PIDFILE
    }
    
    start(){
     start-stop-daemon --start --pidfile $PIDFILE -b -m --chdir $WORKDIR --exec /usr/bin/sudo -- -u $USER $CMD
     sleep 2
     daemon_status
     if [ $? -eq 0 ]; then
       echo "$DAEMON_NAME started ok"
     else
       echo "$DAEMON_NAME start failed"
    fi
    }
    
    stop(){
     start-stop-daemon --stop --quiet --pidfile $PIDFILE
     RET=$?
     if [ $RET -eq 0 ]; then
       rm -f $PIDFILE
       echo "$DAEMON_NAME stopped"
     else
       echo "$DAEMON_NAME stopping failed"
     fi
    }
    
    status(){
     daemon_status
     if [ $? -eq 0 ]; then
       echo "$DAEMON_NAME is running"
     else
       echo "$DAEMON_NAME is stopped"
     fi
    }
    
    case "$1" in
      start)
        start
       ;;
      stop)
        stop
       ;;
      restart)
        stop
        start
       ;;
      status)
        status
       ;;
      *)
       echo "sds [start|stop|status]"
    esac
    
    1. chmod 700 /etc/init.d/sds
    2. chown root:root /etc/init.d/sds
    3. update-rc.d sds defaults
    4. update-rc.d sds enable
    5. 调整crontab,如:

      * 23 * * * / usr / sbin / service sds restart

    6. 我们刚刚做了什么:

      • 使用start,stop和status命令创建init.d脚本文件
      • 允许该脚本在系统启动时运行
      • 设置crontab以执行服务的重启动作

      要正常使用,请将WORKDIR调整为完整路径,然后自定义CMDUSER