我在 linode 上有两台服务器,上面有一些网站。我创建了一个脚本来查看 mysql 是否在服务器上运行,如果没有运行,则该脚本将启动 mysql。该脚本位于两台服务器上并且具有相同的文件结构。
我已在两台服务器上使用“crontab -e”命令将脚本添加到 cron 中。问题是我的开发服务器将运行脚本,而生产服务器将保持关闭状态。我在 crontab 末尾添加了空格,所以我知道这不是问题。
当脚本在产品服务器上手动运行时,我收到此错误“(无法读取“-p”的信息:geteuid()= 1000,但您应该是root。)”。即使出现错误,脚本仍然会重新启动 mysql,但是当使用 cron 执行脚本时,mysql 将不会重新启动。另请注意,我已在开发服务器上运行该脚本并设法得到相同的错误。即使存在错误,该脚本也会在 dev 上运行,并在通过 cron 运行时重新启动 mysql。
当我在开发服务器上的 sudo 下运行命令时,它不会要求输入密码,但当我在产品服务器上运行它时,会要求输入密码。
我检查了 syslog,所以我知道 cron 命令正在运行。
该脚本使用带参数 -v -u -l -n -t -p 的 netstat 命令。
答案1
当我在开发服务器上的 sudo 下运行命令时,它不会要求输入密码,但当我在产品服务器上运行它时,会要求输入密码
您是否比较过两个节点上的 sudo 配置?请在两台机器上运行此命令(从您修改 crontab 的帐户):
sudo -l
答案2
有几件事需要注意
以 root 身份运行 visudo 并查看用户是否列在其中应该类似于(您的用户,其中用户名是)
用户名 ALL=(ALL) NOPASSWD: ALL
这将使您无需密码即可执行 sudo。如果没有,请添加它,然后再次尝试您的脚本。
现在,如果它仍然没有作为 cron 运行,那么听起来 cron 条目是正确的,但脚本可能不正确。看起来你的 cron 正在从你在系统日志中看到的内容中触发。尝试 chmod 755 /path/to/script.sh
让 cron 作业再次运行。
如果它仍然没有运行,请检查脚本的所有者。 chown 用户名 /path/to/script.sh
让我们知道这是否有帮助。