首页 > 解决方案 > 在登录 xfce 时运行 ruby​​ 脚本

问题描述

我正在使用 manjaro,我想在登录后运行一个 ruby​​ 脚本。

这是我的脚本:


def get_line(filename, lineno)
  File.open(filename,'r') do |f|
     f.gets until f.lineno == lineno - 1
     f.gets
  end
end


filename = "list.md"
filepath = File.join(File.dirname(__FILE__), filename)

count = %x{cat #{filepath} | sed '/^\s*$/d' | wc -l }.to_i
random_element = rand((1..count))

line = get_line(filepath, random_element)

options = { :address              => "smtp.gmail.com",
            :port                 => 587,
            :user_name            => 'xxxx@gmail.com',
            :password             => 'xxxxx',
            :authentication       => 'plain',
            :enable_starttls_auto => true  }

Mail.defaults do
  delivery_method :smtp, options
end

Mail.deliver do
       to 'xxxxx@gmail.com'
       from 'xxxxxx@gmail.com'
  subject 'Test'
     body "#{line}"
end

我试过了/etc/profile.d.bash_profile作为服务/etc/systemd/system

[Unit]
Description=Example systemd service.

[Service]
Type=simple
ExecStart=/usr/bin/ruby /home/dnl/Documents/git/send_mail_reminders/send_mail.rb

[Install]
WantedBy=multi-user.target

我做了服务启动,状态,启用然后重新启动。

服务状态的输出

● autostart.service - Example systemd service.
     Loaded: loaded (/etc/systemd/system/autostart.service; enabled; vendor preset: disabled)
     Active: failed (Result: exit-code) since Sun 2020-08-16 13:28:10 CEST; 5min ago
    Process: 439 ExecStart=/usr/bin/ruby /home/dnl/Documents/git/send_mail_reminders/send_mail.rb (code=exited, status=1/FAILURE)
   Main PID: 439 (code=exited, status=1/FAILURE)

Aug 16 13:28:10 dnl ruby[439]:         from /usr/lib/ruby/2.7.0/net/smtp.rb:548:in `do_start'
Aug 16 13:28:10 dnl ruby[439]:         from /usr/lib/ruby/2.7.0/net/smtp.rb:518:in `start'
Aug 16 13:28:10 dnl ruby[439]:         from /usr/lib/ruby/gems/2.7.0/gems/mail-2.7.1/lib/mail/network/delivery_methods/smtp.rb:109:in `start_smtp_session'
Aug 16 13:28:10 dnl ruby[439]:         from /usr/lib/ruby/gems/2.7.0/gems/mail-2.7.1/lib/mail/network/delivery_methods/smtp.rb:100:in `deliver!'
Aug 16 13:28:10 dnl ruby[439]:         from /usr/lib/ruby/gems/2.7.0/gems/mail-2.7.1/lib/mail/message.rb:2159:in `do_delivery'
Aug 16 13:28:10 dnl ruby[439]:         from /usr/lib/ruby/gems/2.7.0/gems/mail-2.7.1/lib/mail/message.rb:262:in `deliver'
Aug 16 13:28:10 dnl ruby[439]:         from /usr/lib/ruby/gems/2.7.0/gems/mail-2.7.1/lib/mail/mail.rb:133:in `deliver'
Aug 16 13:28:10 dnl ruby[439]:         from /home/dnl/Documents/git/send_mail_reminders/send_mail.rb:30:in `<main>'
Aug 16 13:28:10 dnl systemd[1]: autostart.service: Main process exited, code=exited, status=1/FAILURE
Aug 16 13:28:10 dnl systemd[1]: autostart.service: Failed with result 'exit-code'.

我的红宝石代码有问题吗?

标签: rubyemailsmtp

解决方案


根据产生错误的行号,打开网络套接字时有超时,所以当您的服务运行时,似乎网络还没有准备好。试试这个[Unit]部分,这样服务将在网络初始化后启动:

[Unit]
Description=Example systemd service.
Requires=network-online.target
After=network-online.target

推荐阅读