У меня есть задание cron, которое запускается каждые X минут и должно перезапустить службу amazon-ssm-agent
. Однако я заметил, что мой ruby-скрипт на самом деле никогда этого не делает.
Вот как выглядит мой crontab:
* * * * * /root/./my_script.rb
Вот очень простое содержимое скрипта ruby:
#!/usr/bin/env ruby
#
command = "service amazon-ssm-agent stop"
system(command)
Если я слежу за /var/log/amazon/ssm/amazon-ssm-agent.log
, он никогда не остановится. Если я проверю сервис с помощью service amazon-ssm-agent status
, он все еще отображается онлайн.
Каков наилучший способ остановить или перезапустить службу из скрипта ruby, который вызывается заданием Cron? Сегодня я столкнулся с довольно серьезной проблемой, и я думаю, что это причина.
Я попытался зафиксировать результат и записать его в файл, но когда запускается задание cron, файл создается, но он пуст. Вот как теперь выглядит ruby-скрипт:
#!/usr/bin/env ruby
command = "service amazon-ssm-agent stop"
result = system(command)
File.open("/root/result.txt", "w") {|f| f.write(result)}
Я также попытался просто изменить скрипт на это:
#!/usr/bin/env ruby
command = "service amazon-ssm-agent stop"
но все равно не повезло. Я даже только что изменил само задание cron, чтобы запустить службу, а не вызывать скрипт ruby, который запускает службу, но не повезло:
* * * * * service amazon-ssm-agent start
Служба никогда не запускается.
Я еще не пробовал, но я в основном пытаюсь включить это в относительно большой скрипт Ruby.
Как узнать, работает ли скрипт Ruby? Если этот скрипт запускается от имени пользователя root, вы должны убедиться, что Ruby находится в PATH
корневого каталога. Я предлагаю простой тест, такой как system("date > /tmp/ruby-test.out")
, чтобы проверить, работает ли он вообще.
@Casper, в сценарии Ruby есть другие фрагменты кода, которые выполняются до и после этой строки. Почти все работает, за исключением попытки запустить службу в сценарии Ruby, которая вызывается из задания cron.
Каков результат вызова system
, то есть его возвращаемое значение?
Вы не можете использовать `#{command}`
?
Когда я фиксирую результат и записываю его в файл, файл оказывается пустым. Когда я попытался использовать #{command}
, это все равно не сработало, хотя файл примера был создан. Это очень странно.
Разобрался с проблемой, которая была глупой. Я понял, что команда службы не находится в путях среды, которые есть у задания cron, поэтому она никогда не работала. Как и ifconfig
, что я и пытался проверить.
Поэтому мне пришлось заменить мою команду service
в скрипте Ruby на /usr/sbin/service
, и после этого она работала безупречно.
Будет ли работать, если вы замените сценарий Ruby сценарием оболочки?