Как добавить планировщик crontab через скрипт пользовательских данных в aws ec2? - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь добавить crontab, чтобы я мог получать метрики облачных часов об используемом дисковом пространстве и использовании дискового пространства каждые 5 минут с помощью скрипта пользовательских данных.Ниже приведен мой скрипт пользовательских данных:

   #!/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

все эти шаги работают должным образом, если я пытаюсь сделать это из aws-терминала, также ни один из шагов не выполняется в облаке init-logs, для первогораз я могу получить метрики наблюдения за облаком, но после этого я не могу получить, так что это означает, что crontab не работает, как это исправить?

Ответы [ 4 ]

0 голосов
/ 05 августа 2019

Эта запись старая, но я слишком долго находил это решение.

Я пытался автоматизировать добавление cronjob в ec2, чтобы мне не приходилось вручную планировать работу или добавлять скрипт.все это было сделано с помощью пользовательских данных в облачной информации.мое решение требовало использования системного менеджера.U может потребоваться изменить системный менеджер на ec2-user.

Для этого я использовал:

crontab -u ssm-user / path / to / script

Я пробовал, как и 5 других решений, которые работали в консоли, но не работали в пользовательских данных.Я действительно надеюсь, что это поможет другим автоматизировать их развертывание в будущем

0 голосов
/ 18 октября 2018

Вы также можете использовать heredoc для достижения этого более чистым способом

crontab<<EOF
* * * * * script.sh
EOF

И если вы хотите добавить к существующему crontab, сделайте следующее

crontab<<EOF
$(crontab -l)
* * * * * script2.sh
EOF

Теперь перечислитеcrontab с использованием

crontab -l

Кроме того, на странице руководства говорится, что у каждого пользователя может быть свой собственный crontab, и хотя это файлы в / var / spool / cron, они не предназначены для непосредственного редактирования.

например, если вы создаете cron как пользователь root, файл cron соответствующего пользователя будет иметь вид

/var/spool/cron/root

Пожалуйста, см. Ниже подробно

[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 ~]#

В вашем случае это будетпохожи

#!/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
0 голосов
/ 23 октября 2018

для добавления строк в crontab я использовал эти строки в моем скрипте пользовательских данных, и он отлично работал для меня

sudo su

crontab -u ec2-user -l

echo -e "* / 5 * * * * ~ / aws-scripts-mon / mon-put-instance-data.pl -mem-util --me-used --mem-aid --swap-util--disk-space-util.crontab -u ec2-user -

выход

ссылка, которая помогает мне найти решение: https://serverfault.com/questions/296949/programmatically-add-entry-to-users-crontab

0 голосов
/ 18 октября 2018

Не используйте -e, так как это режим редактирования, вам нужно что-то вроде

  (crontab -l 2>/dev/null; echo "*/5 * * * * /path/to/job -with args") | crontab -
...