V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
zhangneww
V2EX  ›  Linux

如何远程执行服务器上的脚本?给不懂技术的人用的

  •  1
     
  •   zhangneww ·
    zhangnew · 2016-02-29 13:23:10 +08:00 · 6453 次点击
    这是一个创建于 3193 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Wordpress 服务器上的 MySQL 中一个表经常出错,需要 mysqlcheck 自动修复一下,写了脚本,为了方便,想让不懂技术的人也能使用。

    想法一:服务器定时检查某个邮箱,由操作人员向这个邮箱发送修复命令,服务器收到邮件后执行脚本,并把执行结果通过邮件返回给操作人员。缺点是安装邮件系统,成本略高(各种成本)。

    想法二:安装微信或 QQ 机器人。缺点是 web 协议不稳定。

    想法三:写一个 web 接口,通过浏览器访问。缺点是对用户不友好,比较繁琐。

    想法四:写一个手机软件,写几个 button ,通过 ssh 控制服务器执行命令。

    求各位大神指导一下,有没有现成的工具,或者有没有更简单的办法,谢谢。

    第 1 条附言  ·  2016-03-01 00:01:46 +08:00

    1 、找到一个比较傻瓜的工具 https://github.com/Skarafaz/mercury/wiki 缺点在于不能在 app 中添加修改配置。

    2 、关于定时执行,我是想过的,但是对 MySQL 了解不多,不知道经常执行那个修复命令对数据库的性能有没有影响,或者有没有其他影响。

    3 、不知道能不能定时检查表是否损坏,没有查到相关命令。只写了定时检查 MySQL 是否宕机,宕机重启 MySQL 的脚本。

    4 、 wp_meta 表损坏原因不清楚,通常发生在网站被攻击, MySQL 宕机。

    37 条回复    2016-03-02 10:46:39 +08:00
    hienchu
        1
    hienchu  
       2016-02-29 13:45:24 +08:00   ❤️ 1
    想法 4 最安全
    zhangneww
        2
    zhangneww  
    OP
       2016-02-29 13:46:05 +08:00
    发现了一个 SSH 工具,比较傻瓜了,<https://github.com/Skarafaz/mercury/wiki>,试了一下可以,但是没有返回结果,还要手动去文件系统中创建文件,还不能在软件中编辑配置文件。
    cevincheung
        3
    cevincheung  
       2016-02-29 13:46:05 +08:00   ❤️ 1
    不是 wordpress 么。后台写个插件呗。
    salmon5
        4
    salmon5  
       2016-02-29 13:50:16 +08:00   ❤️ 1
    wesley
        5
    wesley  
       2016-02-29 13:58:18 +08:00   ❤️ 1
    zhangneww
        6
    zhangneww  
    OP
       2016-02-29 14:01:04 +08:00
    @wesley 我是用 Expect 写的脚本,但是需要给不懂技术的人 **远程** 使用,就是连 ssh 都不懂的人。
    likuku
        7
    likuku  
       2016-02-29 14:07:27 +08:00   ❤️ 1
    以前有类似需求, nagios 监控 mysql ,发现需要修表时,自动执行修表脚本。
    ProjectAmber
        8
    ProjectAmber  
       2016-02-29 14:08:30 +08:00 via iPhone   ❤️ 1
    plink 。
    b821025551b
        9
    b821025551b  
       2016-02-29 14:10:40 +08:00   ❤️ 1
    想法 3 +弄个 hao123 那种导航
    zhangneww
        10
    zhangneww  
    OP
       2016-02-29 14:12:08 +08:00
    @b821025551b 不安全啊
    mcone
        11
    mcone  
       2016-02-29 14:45:58 +08:00   ❤️ 1
    想法 4+跨平台版本,类似于那种一键执行 xxx 的感觉,局限于手机感觉不好

    另外,这种操作感觉已经很危险了,你确定要让完全不懂运维的人用吗……

    不如大概教一下远程连接,给他们专门弄个用户,证书登录,写好一个脚本,弄上类似于 suid 之类的标志位,限制权限后给他们直接跑……虽然他们不懂技术,但是仅仅登陆+执行,也不怎么难学吧
    Ann1020
        12
    Ann1020  
       2016-02-29 15:45:12 +08:00
    软件开发交流 群: 466678068
    gdtv
        13
    gdtv  
       2016-02-29 15:51:06 +08:00
    phpmyadmin 不好吗?
    oott123
        14
    oott123  
       2016-02-29 15:53:09 +08:00
    为啥 web 协议不稳定
    ChoateYao
        15
    ChoateYao  
       2016-02-29 15:54:21 +08:00
    方法 5:写一个 Web 界面,写几个按钮,通过 ssh 控制服务器执行命令。
    skydiver
        16
    skydiver  
       2016-02-29 15:54:45 +08:00   ❤️ 3
    经常出错难道不该查找一下原因么
    master
        17
    master  
       2016-02-29 15:56:44 +08:00
    crazyxin1988
        18
    crazyxin1988  
       2016-02-29 16:02:46 +08:00
    fabric
    用户只要本地装一下 python 和 fabric 本地 run 一下就好
    Strikeactor
        19
    Strikeactor  
       2016-02-29 16:05:57 +08:00
    弄个 cron 自动执行?
    zhangneww
        20
    zhangneww  
    OP
       2016-02-29 17:39:32 +08:00
    @skydiver
    @master 通常发生在网站被攻击的时候,导致 mysql 进程关闭,后来就表损坏了。小站偶尔被 DDos 无解啊。
    zjqzxc
        21
    zjqzxc  
       2016-02-29 18:10:48 +08:00   ❤️ 1
    新建一个用户,把需要执行的命令写到.bashrc 里面去
    让不懂技术的人通过 ssh 登陆一下这个用户就行了

    方法:比如装一个能记住密码的 ssh 客户端( secureCRT , xshell 之类)
    新建一个脚本: putty user@ip -pw password

    感觉最好的应该是弄个脚本每个几分钟检查下数据库有没有出错。。
    lucifer4he
        22
    lucifer4he  
       2016-02-29 18:20:29 +08:00
    @Strikeactor 说得好,弄成定时执行。自己别人都不用手动了=。=
    kn007
        23
    kn007  
       2016-02-29 18:24:47 +08:00   ❤️ 1
    1.定时任务-修复表
    2.降低 mysql oom 等级,被攻击时, mysql 不会宕机。
    wph95
        24
    wph95  
       2016-02-29 18:31:40 +08:00
    使用 crontab 解决问题
    zhjits
        25
    zhjits  
       2016-02-29 18:45:47 +08:00   ❤️ 1
    https://landscape.canonical.com/ 这类服务器管理解决方案
    akira
        26
    akira  
       2016-02-29 19:25:52 +08:00
    干嘛不做成定时执行?
    wizardoz
        27
    wizardoz  
       2016-02-29 21:00:42 +08:00
    我觉得 3 跟 4 结合最好,就是写一个 web 接口,但是不止有浏览器访问,应再做一个手机应用来访问 web 接口。
    直接将 ssh 命令放在 app 里面,我觉得扩展性太差了,以后要改方案就得重新升级 app 才行。
    zhangneww
        28
    zhangneww  
    OP
       2016-02-29 21:17:43 +08:00
    @wizardoz https://github.com/Skarafaz/mercury/wiki 这个东西扩展性很好,可惜不能在 app 中编辑配置文件。
    alect
        29
    alect  
       2016-02-29 22:17:23 +08:00   ❤️ 1
    最合适的应该是用 wp 自带的插件吧?
    https://wordpress.org/plugins/wp-dbmanager/
    太多插件可以选,这个给你。。
    zhangneww
        30
    zhangneww  
    OP
       2016-02-29 22:23:00 +08:00
    @alect 哈哈哈哈,机智如你,下次出问题试试能不能解决,谢谢,么么哒
    likuku
        31
    likuku  
       2016-02-29 23:41:04 +08:00
    @zhangneww [通常发生在网站被攻击的时候,导致 mysql 进程关闭,后来就表损坏了。] 你这表这么容易坏? MyISAM 吗? InnoDB 的一般在起点时会自动修复的,假若不能自动修复,手动也最多只能救援模式只读状态下导出数据了。
    zhangneww
        32
    zhangneww  
    OP
       2016-02-29 23:53:21 +08:00
    @likuku 感谢回复,我对 MySQL 了解不多,那个修复的命令也是 Google 来的。关于说的 InnoDB MyISAM 都不懂,具体损坏原因也不清楚,因为我也不知道黑客什么时候 d 我。
    sunsol
        33
    sunsol  
       2016-03-01 07:53:00 +08:00   ❤️ 2
    想法一最简单也最实用。
    无非就是出了问题自动修复并通知有关人士,
    对于不懂的人只需告知某时间发生某事就行了,
    如果让他选择哪个操作那还不如机器自己判断那个操作更合适,
    只要把执行结果告知相关人士就行了。
    想法 3.4 都要某人手动刷新,明显不合适。
    想法 1.2 都比较通用,但明显电邮技术更成熟也更简单方便。
    babytomas
        34
    babytomas  
       2016-03-01 08:09:41 +08:00 via Android
    既然是 MySQL 的问题,

    难道不可以创建一个数据库用户远程连接吗?

    如果觉得不安全,设置那个用户只可以有 xx 数据库的权限即可。
    tomczhen
        35
    tomczhen  
       2016-03-01 11:19:59 +08:00   ❤️ 1
    1.用 OpenResty 做个接口调用修复命令。
    2.觉得上面那个麻烦了就装个 Jenkins ,建个构建任务来执行脚本,利用它提供的接口来执行任务。
    3.邮件可以用支持 WebAPI 的投递方式,阿里云 /SengCloud 都可以,每个月的免费额度应该够用了。
    4.App 方面可以用 Automate (安卓)试试,可以的话还能配合推送 /邮件来做成触发式。

    PS :应该可以做成检测数据库状态来执行修复的,自动运行就好。当然,一定要有交互的话就没办法了。
    Neveroldmilk
        36
    Neveroldmilk  
       2016-03-01 22:33:29 +08:00
    Mysql 数据天天损坏本身就有问题,如果这个问题不彻底解决,那是治标不治本。
    likuku
        37
    likuku  
       2016-03-02 10:46:39 +08:00
    @zhangneww MyISAM 和 InnoDB 都是 mysql 的表存储引擎,可以不正确滴比喻是 mysql 的 "文件系统"。

    MyISAM 是最早的 mysql 表存储引擎,表级锁,单纯的读 or 写速度很快,但有时可能会莫名其妙得到不正确结果(跑的太快裤子都掉了),不支持事务, mysql 意外退出 /表很大 /负载很重 时损坏表,需要运行 myisamchk 等工具来检查和修表。

    InnoDB 是现代化的 mysql 表存储引擎,行级锁,完整支持事务,在启动时会自检,若表损坏,会自动修复。

    具体的相关信息,谷歌吧,大把。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1254 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:21 · PVG 02:21 · LAX 10:21 · JFK 13:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.