因此,我为自己制作了一个小脚本,用于监视我的服务目录中是否存在已更改的任何 PHP 文件。它旨在从 crontab 每 5 分钟运行一次,并将任何更改通过电子邮件发送给我,以便我可以检查它们。
有很多网站在机器上运行,如果你知道我的意思,我希望能够关注任何新脚本以确保那里没有我不喜欢的外观。
问题是当我从命令行运行脚本时,脚本运行 100% 正常,但它不能从 crontab 正确运行。该脚本包含在下面:
rm /root/sec/email
find /var/www/ -name '*.php' -not -name '*.tpl.*' -type f -mtime -0.005 -exec ls -al {} \; > /root/sec/email
if [[ -s /root/sec/email ]] ; then
mail -s "PHP Change Alert on FSE4" matt@aroxo.com muji@aroxo.com < /root/sec/email
echo "It ran" >> /root/sec/log
else
echo "It did not run" >> /root/sec/log
fi ;
Run Code Online (Sandbox Code Playgroud)
问题在于 IF 条件。即使名为“email”的文件的大小不为零,if 子句的错误一侧也会触发(else)。
任何想法我做错了什么?
干杯,
马特。
我正在尝试在构建 AWS 实例时向根 crontab 添加两行。我有一组命令是“用户数据”的一部分。这些命令在创建实例时以 root 身份运行。我想将这两行添加到 crontab 中:
@daily /home/ubuntu/db-backup-to-s3-daily.sh
@hourly /home/ubuntu/db-backup-to-s3-hourly.sh
Run Code Online (Sandbox Code Playgroud)
我正在使用以下方法(基于对这个问题的回答):
(crontab -u ubuntu -l ; echo -e "@daily /home/ubuntu/db-backup-to-s3-daily.sh\n@hourly /home/ubuntu/db-backup-to-s3-hourly.sh") | crontab -u ubuntu -
Run Code Online (Sandbox Code Playgroud)
但是,这在创建实例时不起作用,但如果我登录并运行此行,它确实起作用。有什么不同的方法可以将行附加到 crontab 吗?
我正在用 bash 编写一个 collectd nagios 自定义检查脚本。我遇到的问题是 nagios 将主机名显示为 host.name.domain 但 collectd 将 WSP 文件保存为 host_name_domain。我的问题是如何使变量将从 nagios (host.name.domain) 获取的主机名转换为 collectd 格式 (host_name_domain)。
这是必须发生转换的部分。所以 WSP_PATH 会在变量 $NHOST 中给出主机名的 collectd 格式
WSP_PATH=/var/lib/carbon/whisper/ctd/$NHOST/uptime/uptime.wsp
Run Code Online (Sandbox Code Playgroud) 我想要一行 shell/bash 来做一些事情:
test "`free | grep | awk | whatever` -gt 80" && any_command
Run Code Online (Sandbox Code Playgroud)
将整个系统使用的 ram的总百分比与硬编码数字(在我的情况下为 80)进行比较。test只要any_command在 ram 高于给定百分比时执行就无关紧要。
有关于这是如何构建 monit/bluepill/god 之类的问题的答案。我 100% 同意,您很可能应该遵循这些答案中的建议。但是,这个问题特别是关于我所描述的确切路线,无论出于何种原因,假设这可能涉及所有注意事项和问题。
我希望有人可以帮助我解决这个问题。我已经尝试了一段时间了,有各种各样的变化,似乎无法让它发挥作用。
我正在尝试编写一种方法来登录https://login.three.ie/以从 */My_account_balance 检查帐户余额
我已经尝试了各种 wget 命令,但从我读到的内容来看,curl 更有可能完成这项任务。
我一直在尝试我在网上遇到的变体,包括从这里开始的 stackoverflow,但似乎没有任何效果。
这是我尝试的最后一个:
curl -X POST -c cookies.txt -u "Uern@me:P@ssw0rd" https://login.three.ie/
Run Code Online (Sandbox Code Playgroud)
这确实将 cookie 文件保存在此处:
$ cat cookies.txt
Netscape HTTP Cookie File
#http://curl.haxx.se/docs/http-cookies.html
This file was generated by libcurl! Edit at your own risk.
HttpOnly_login.three.ie FALSE / FALSE 1433988274
laravel_session eyJpdiI6IkFZWmxvZ2oyXC9NNGVIbHVpejZwRWp3PT0iLCJ2YWx1ZSI6Imxkd25UKzBoMldiQlhYZVJnVUpuNUVsblZ1cGJYZWcwM2E1bTtIWHRiQ2pwV0VwemJ4NFlYcDlzTndSeFRNanpwdDhMMTIrS2RGZGdGd0RNZU1yREJ3PT0iLCJtYWMiOiI0NWUwYzc1TY4ODI3ZmY3ODY5NjliODkxODMyODIzMjQwNmNkNjljNTE2NzQxNmQ4MzhhNDljNTdjM2QwZGY1In0%3D
Run Code Online (Sandbox Code Playgroud)
但是当我尝试重新使用 cookie 时,它看起来像是重定向或其他东西,因为这就是我得到的:
$ curl -b cookies.txt https://my3account.three.ie/My_account_balance
<html><head><title>302 Moved Temporarily</title></head>
<body bgcolor="#FFFFFF">
<p>This document you requested has moved temporarily.</p>
<p>It's now at <a href="https://sso.three.ie/mylogin//login?auth-
required=seamless&service=https%3A%F%
2Fmy3account.three.ie%2FMy_account_balance">https://sso.three.ie/mylogin//login?auth-required=seamless&service=https%3A%2F%2Fmy3account.three.ie%2FMy_account_balance</a>.</p>
Run Code Online (Sandbox Code Playgroud)
我不明白这里发生了什么。有没有人知道出了什么问题,或者更好,如何解决这个问题?
谢谢
我正在尝试编写一个负责在远程服务器上创建文件夹的 Bash 脚本。
片段:
!/bin/bash -e
echo "Creating remote folder."
echo mkdir test_folder | sftp -oPort=22 192.168.0.11:/tmp
if [[ $? != 0 ]]; then
echo "Transfer failed!"
exit 1
else
echo "Transfer complete."
fi
echo $?
Run Code Online (Sandbox Code Playgroud)
输出是:
Connected to 192.168.0.11.
Changing to: /tmp
sftp> mkdir test_folder
Couldn't create directory: Failure
Transfer complete.
0
Run Code Online (Sandbox Code Playgroud)
所以返回码是 0 但显然有错误。
如何捕获远程错误并在脚本中设置适当的返回码?
如何从 sudo 用户检查 root 环境变量?我尝试了 su 和 sudo 的各种键和组合,但没有运气。
比如普通用户$HISTFILESIZE=2000,root用户9999。
vagrant@default-debian-78-64-nocm:~$ echo $HISTFILESIZE
2000
vagrant@default-debian-78-64-nocm:~$ sudo -i
root@default-debian-78-64-nocm:~# echo $HISTFILESIZE
9999
Run Code Online (Sandbox Code Playgroud)
但是当我尝试通过 sudo 获取 root $HISTFILESIZE 时 - 它总是返回 2000:
vagrant@default-debian-78-64-nocm:~$ sudo -i echo $HISTFILESIZE
2000
vagrant@default-debian-78-64-nocm:~$ sudo -i su - -c "echo $HISTFILESIZE"
2000
vagrant@default-debian-78-64-nocm:~$ sudo -i bash -c "echo $HISTFILESIZE"
2000
vagrant@default-debian-78-64-nocm:~$ sudo -i bash -l -c "echo $HISTFILESIZE"
2000
Run Code Online (Sandbox Code Playgroud) 我将以下简单的 shell 脚本传递给 LXC 容器上的 bash:
apt-get update
apt-get install postgresql -y
sudo -u postgres psql -c 'create database dvdrental;'
Run Code Online (Sandbox Code Playgroud)
我用来运行它的实际命令是:
cat sample.sh | lxc-attach -n test-container -- /bin/bash
Run Code Online (Sandbox Code Playgroud)
我这样做而不是将脚本上传到容器并以这种方式执行的原因是,这只是我们正在构建的更复杂的应用程序的概念证明,该应用程序必须通过标准输入接收命令并运行它们在容器中。
它似乎工作得很好,除了一件事。它psql在 postgresql 仍在安装时移动到命令上,即,
[...]
Get:21 http://archive.ubuntu.com/ubuntu/ trusty/main ssl-cert all 1.0.33 [16.6 kB]
Get:22 http://archive.ubuntu.com/ubuntu/ trusty-updates/main postgresql-common all 154ubuntu1 [103 kB]
Get:23 http://archive.ubuntu.com/ubuntu/ trusty-updates/main postgresql-9.3 amd64 9.3.10-0ubuntu0.14.04 [2,669 kB]
Get:24 http://archive.ubuntu.com/ubuntu/ trusty-updates/main postgresql all 9.3+154ubuntu1 [5,038 B]
Fetched 5,834 kB in 28s (207 kB/s)
Preconfiguring packages ...
sudo -u …Run Code Online (Sandbox Code Playgroud) 我实验性地跑了,if bat1 == 1 then echo yes fi并被困在一个单角括号提示炼狱中,其中Ctrl+c或z无法打开门。有什么建议?
我创建了一个 shell 脚本来完成 3 个简单的任务(压缩一个目录,重命名最终文件并删除源目录)。脚本源码如下:
#!/bin/bash
if [[ $2 == *"/data/"* ]]
then
src= $2"/*";
dest= $1".zip";
# Just for test
echo $src;
# Commented for now
#zip -r -j $dest $src
#mv $dest $1
#rm -rf $2
else
echo "Invalid arguments";
fi
Run Code Online (Sandbox Code Playgroud)
当我使用这些参数运行上面的脚本时,出现错误:
./scriptzip.sh /data/file-new /data/file-old
./scriptzip.sh: line 4: /data/file-old/*: No such file or directory
./scriptzip.sh: line 5: /data/file-new.zip: No such file or directory
Run Code Online (Sandbox Code Playgroud)
如何防止外壳程序测试“类似目录”字符串的变量?有什么办法可以跳过吗?