问题背景:

想在oj上加一个重启判题服务的按钮调用shell而已

1.使用su root进入root账户

修改/etc/sudoers权限 777

%sudo ALL=(ALL:ALL) ALL改为

%sudo ALL=(ALL:ALL) NOPASSWD:ALL

%表示组 即sudo组的都可以免密码使用sudo指令(其实有点危险啊)

2.usermod -G sudo www-data sudo

将执行php页面的用户www-data加入sudo组中

3.重启apache

在ubuntu中是/etc/init.d/apache2 restart

4.exec('sudo killall -9 judged 2>&1 ',$output,$ans);可以将报错信息重定向输出到$output变量中

5.如果想在后台运行 php页面不等待的写法

system("sudo ./restart.sh  >>/home/important/judgeonline2017core/log/newfile.txt &");

必须要把输出的信息重定向到文件才可以!!要不然那个脚本不运行完 网页就一直转圈圈 刷新就崩 但是pid变了


MD太菜了 这么个小功能加了两天才写完

经历的一个小插曲是:

www-data执行sudo不是得输入密码么 但是PHP执行脚本没地方让你输入啊 就得改sudoers文件 这个文件正常权限是440只读的 我是用sudo chmod 777修改的 然后加了免密码 nopasswd: all那行以后 再sudo chmod 440就保存了 因为sudoers文件必须是440的时候sudo命令才能用嘛 不用sudo我连重启进去安全模式都不能做 就只能去机房强制关机  然后我跟我导说这个事 他说你干嘛用sudo  su root使用root账号就得了呗 学艺不精

哭