我今天看了一下 crontab 的任务,居然回滚了生产环境 crontab 的配置…… - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
phpfpm
V2EX    Linux

我今天看了一下 crontab 的任务,居然回滚了生产环境 crontab 的配置……

  •  
  •   phpfpm 2019 年 2 月 22 日 4123 次点击
    这是一个创建于 2521 天前的主题,其中的信息可能已经有所发展或是发生改变。

    早晨到公司上班,同事说某台 crontab 的服务器负载有点高,于是我就登上去 敲了一行

    phpfpm@cron:~$ sudo su www crontab -l 

    因为 php-fpm 和 php 脚本都是用 www 启动的,所以 crontab 的 job 也在 www 用户里面。

    之后,弹出来一串 bash 报错之后,我就神奇的发现 crontab 的配置被回滚到一个一年前的备份了。 有人能猜到发生什么吗?

    先不多说了,我赶飞机跑路了。。。

    第 1 条附言    2019 年 2 月 22 日

    补充简要说一下发生了什么。

    1 sudo -u www crontab -l 敲成了

    sudo su www crontab -l 

    等价于

    sudo su -l www [args=crontab] 

    等价于

    sudo su -l www /bin/bash crontab 

    2 su和crontab碰巧都有-l这个参数 su -l 是说切换到login shell并改变pwd

    3 ~www/下有crontab这个文件 当然,还有一个文件叫做crontab.xxx 除此以外没有别的文件了

    www:~$ ls crontab crontab.foo 

    4 crontab是备份的最新版本的配置,而crontab.foo是去年的某个版本的配置

    crontab配置里面,bash执行的时候 对于#开头的注释,不执行不报错 对于数字开头的 0 50等等 报 not found 对*/20这样的 也找不到 这些传到bash都不会被解析

    但是唯独有两行

            • /foo bar 被解析执行了

    5 * 被展开为 crontab crontab.foo 多个*展开为多份

    于是相当于crontab source了crontab.foo

    我……学到了。。。

    16 条回复    2019-02-25 17:52:35 +08:00
    defunct9
        1
    defunct9  
       2019 年 2 月 22 日   1
    猜不到,估计得打宇宙飞车跑路
    secboy
        2
    secboy  
       2019 年 2 月 22 日
    说出你的故事
    MeteorCat
        3
    MeteorCat  
       2019 年 2 月 22 日 via Android
    我上次也是倒霉,sudo crontab -按下去的时候,打个喷嚏条件反射按了 r 和回车
    9hills
        4
    9hills  
       2019 年 2 月 22 日 via iPhone
    没这么简单吧,你可以 history 看你具体执行的命令

    crontab 后面加文件名可以加载文件内容到 crontab 中,百分之九十九的可能性是误操作了
    mgso
        5
    mgso  
       2019 年 2 月 22 日 via iPhone
    顺便说下 键盘上 e 键和 r 键靠得太近了
    wingoo
        6
    wingoo  
       2019 年 2 月 22 日
    e,r 也按错过一次, 一身冷汗, 还好有备份
    joysir
        7
    joysir  
       2019 年 2 月 22 日
    你的命令写法错误,导致被解析为 crontab -l 被解析为 su 的参数了,具体如下:

    1. sudo su www 切换到 www 用户,并进入该用户的家目录
    2. crontab 打开当前目录的 crontab 文件并执行(然而,你 www 家目录正好有一个名为 crontab 的备份文件)
    3. -l 模拟重新登录
    joysir
        8
    joysir  
       2019 年 2 月 22 日
    @joysir 输入太快,第一句表达有误,应该是:
    你的命令写法错误,导致 crontab -l 被解析为 su 的参数了,具体如下:
    yulgang
        9
    yulgang  
       2019 年 2 月 22 日
    难道你执行了 source ~/.bash_history ?
    phpfpm
        10
    phpfpm  
    OP
       2019 年 2 月 22 日
    @joysir 对头,我一会说详细的。
    firebroo
        11
    firebroo  
       2019 年 2 月 22 日
    顺便说下 键盘上 e 键和 r 键靠得太近了
    geeti
        12
    geeti  
       2019 年 2 月 22 日
    你们登陆 production 不需要第二个人在旁边看着么
    phpfpm
        13
    phpfpm  
    OP
       2019 年 2 月 22 日
    @geet emm 如果不执行危险操作一般都是自己来吧
    and,如果有一些修改的什么的走 saltstack

    对于 crontab,我们有一套管理平台平时增删改都在那上面
    排查问题的时候我就顺手在服务器上看了。。
    Ansen
        14
    Ansen  
       2019 年 2 月 22 日   1
    所以我一般都是 cat /var/spool/cron/xxxx
    BubbleNoodle
        15
    BubbleNoodle  
       2019 年 2 月 22 日
    不建议在环境变量下面,引用 crontab

    踏踏实实放在 etc 下面。
    phpfpm
        16
    phpfpm  
    OP
       2019 年 2 月 25 日
    @Ansen 好主意~
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2235 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 00:27 PVG 08:27 LAX 16:27 JFK 19:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86