Vat*_*hul 2 cron amazon-web-services cloud-init aws-sdk
我正在尝试添加一个crontab,以便可以通过用户数据脚本每5分钟获取一次使用的磁盘空间和磁盘空间利用率的cloudwatch指标。以下是我的用户数据脚本:
#!/bin/bash
sudo yum install -y perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https perl-Digest-SHA.x86_64
curl https://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.2.zip -O
unzip CloudWatchMonitoringScripts-1.2.2.zip && rm CloudWatchMonitoringScripts-1.2.2.zip && cd aws-scripts-mon
crontab<<EOF
*/1 * * * * ~/aws-scripts-mon/mon-put-instance-data.pl -mem-util --mem-used --mem-avail --swap-util --disk-space-util --disk-space-used --disk-space-avail --memory-units=megabytes --disk-path=/dev/xvda1 --from-cron
EOF
./mon-put-instance-data.pl -mem-util --mem-used --mem-avail --swap-util --disk-space-util --disk-space-used --disk-space-avail --memory-units=megabytes --disk-path=/dev/xvda1
Run Code Online (Sandbox Code Playgroud)
从aws-terminal运行时,所有这些步骤均正常工作,在cloud-init-logs中也没有步骤失败。我第一次能够获得云监视指标,但之后却无法通过,因此这意味着crontab无法正常工作,该如何解决?
您还可以使用 heredoc 以更简洁的方式实现此目的
crontab<<EOF
* * * * * script.sh
EOF
Run Code Online (Sandbox Code Playgroud)
如果您想附加到现有的 crontab,请执行以下操作
crontab<<EOF
$(crontab -l)
* * * * * script2.sh
EOF
Run Code Online (Sandbox Code Playgroud)
现在列出 crontab 使用
crontab -l
Run Code Online (Sandbox Code Playgroud)
此外,手册页说每个用户都可以拥有自己的 crontab,尽管这些文件位于 /var/spool/cron 中,但不能直接编辑它们。
例如,如果您以 root 用户身份创建 cron,则相应用户的 cron 文件将是
/var/spool/cron/root
Run Code Online (Sandbox Code Playgroud)
详细请看下面
[root@localhost ~]# crontab -l
no crontab for root
[root@localhost ~]# crontab<<EOF
*/5 * * * * script1.sh
EOF
[root@localhost ~]# crontab -l
*/5 * * * * script1.sh
[root@localhost ~]# crontab<<EOF
*/10 * * * * script2.sh
EOF
[root@localhost ~]# crontab -l
*/10 * * * * script2.sh
[root@localhost ~]# crontab<<EOF
$(crontab -l)
* * * * * script3.sh
EOF
[root@localhost ~]# crontab -l
*/10 * * * * script2.sh
* * * * * script3.sh
[root@localhost ~]# crontab<<EOF
$(crontab -l)
* * * * * script4.sh
EOF
[root@localhost ~]# crontab -l
*/10 * * * * script2.sh
* * * * * script3.sh
* * * * * script4.sh
[root@localhost ~]# cat /var/spool/cron/root
*/10 * * * * script2.sh
* * * * * script3.sh
* * * * * script4.sh
[root@localhost ~]#
Run Code Online (Sandbox Code Playgroud)
在你的情况下,它看起来像
#!/bin/bash
sudo yum install -y perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https perl-Digest-SHA.x86_64
curl https://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.2.zip -O
unzip CloudWatchMonitoringScripts-1.2.2.zip && rm CloudWatchMonitoringScripts-1.2.2.zip && cd aws-scripts-mon
crontab<<EOF
echo $'i*/5 * * * * ~/aws-scripts-mon/mon-put-instance-data.pl -mem-util --mem-used --mem-avail --swap-util --disk-space-util --disk-space-used --disk-space-avail --memory-units=megabytes --disk-path=/dev/xvda1 --from-cron\E:x\n'
EOF
./mon-put-instance-data.pl -mem-util --mem-used --mem-avail --swap-util --disk-space-util --disk-space-used --disk-space-avail --memory-units=megabytes --disk-path=/dev/xvda1
Run Code Online (Sandbox Code Playgroud)
不要使用-e,因为那是编辑模式,您需要
(crontab -l 2>/dev/null; echo "*/5 * * * * /path/to/job -with args") | crontab -
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1593 次 |
| 最近记录: |